PHP CURL重定向

yew*_*pan 1 php redirect curl

我在php中很新。当前,我面临有关php curl post和重定向的问题。我已经编写了很多代码来连接跨域api。在此API中,响应将重定向我的页面到另一个页面。

所以,现在我面临的是我也无法跟踪api响应。这意味着在我的php脚本中,我的curl已收到重定向页面的网页内容,但我的页面仍然保留。

我可以知道php curl可以遵循API重定向吗?

有谁知道如何解决这个问题?

下面是我的代码。

$url = "http://www.google.com.my"; //example this is an API
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_REFERER, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($data_string))); 

$result = curl_exec($ch);
$response = curl_getinfo($ch);
curl_close($ch); 
Run Code Online (Sandbox Code Playgroud)

在$ result中,我收到了API重定向页面。但这只是Web内容。

Tan*_*Tat 5

设置CURLOPT_FOLLOWLOCATIONtrue使cURL跟随重定向。

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
Run Code Online (Sandbox Code Playgroud)

资料来源:http : //php.net/manual/en/function.curl-setopt.php


Que*_*tin 5

这里有两个HTTP请求。

  1. 从浏览器到 PHP
  2. 从 PHP 到 API

这两个请求是独立的。他们有自己的反应,他们之间没有任何联系不是你自己创造的。

如果响应 2 说“重定向”,那么不会自动使响应 1 也说“重定向”。

要做到这一点:

  • 关闭CURLOPT_FOLLOWLOCATION
  • 从响应中读取 Location 标头 2
  • 在 PHP 中发出 Location 标头(带有函数header()),以便它出现在对 1 的响应中

这假设对您的请求的响应直接显示在浏览器中。即您正在浏览器或类似浏览器中提交表单。

如果请求 1 是 Ajax 请求,则重定向它只会导致重定向的页面传递给 JavaScript。它不会在浏览器中加载新页面。如果你想告诉 JavaScript 加载一个新页面,那么:

  • 关闭CURLOPT_FOLLOWLOCATION
  • 从响应中读取 Location 标头 2
  • 将其放入对 1 的响应正文中(您可能将其编码为 JSON)
  • 在 JavaScript 中读取该响应并使用它来设置location.href新值