php - curl 返回 404 错误

标签 php http curl

我正在使用 cuRL 从远程服务器获取一些数据...响应采用 JSON 格式... 这是我的代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_URL, 'http://www.myaddress.com/mypage.php');
curl_setopt($ch, CURLOPT_POSTFIELDS, array("id" => $id));
$return = curl_exec($ch);
curl_close($ch);

如果我在浏览器中访问链接,页面加载正常,但如果我通过 cuRL 访问,则返回 404 错误...

最佳答案

我可以猜到一些可以从服务器端检查的东西,以显示错误。

1) 正如其他答案中所述,请务必设置所有必要的 header ,您可以检查它们,例如由 firebug,如这里所示,

enter image description here

或者您可以通过 php get_headers 获取 header 功能。 设置它使用

curl_setopt($ch, CURLOPT_HTTPHEADER, array("HeaderName: HeaderValue"));

2) 当您在浏览器中打开一个页面(不包括使用 post 方法提交的表单)时,它会发出一个 get 请求,而不是 post,因此如果在服务器端检查 $_GET,那么您的发帖请求将不会被考虑。

3) 如果您确定它应该是一个 post 请求(比如,它是一个表单提交),那么以下可能是一个问题:一些表单可以有隐藏字段,这又是正在服务器中检查,如果未设置,则会返回错误。因此,您应该查看表单的源代码并将它们(如果有的话)添加到您的发布参数中。

4)如果您要提交表单,请务必也设置提交按钮及其名称和值,因为与隐藏字段类似,这也可以被选中。

5) Cookie 也可能是个问题,因为浏览器默认有它,而 curl 没有。要能够设置和读取 cookie,请使用此代码

// set cookie 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    
// use cookie
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);

此处,$cookie_file cookie 文件的路径。不知道在linux还是mac,但是在windows一定要使用cookie文件的绝对路径。

6)另外,您可以通过

设置referer
curl_setopt($ch, CURLOPT_REFERER, 'http://www.myaddress.com/mypage.php');

编辑:如果是 ajax 请求,您可能需要添加一个 header X-Requested-With,其值为 XMLHttpRequest

关于php - curl 返回 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21001264/

相关文章:

PHP Facebook SDK如何在没有 token 的情况下获取图形API

php - 在到期日通过电子邮件通知

php - 数据库中插入了不正确的值

http - 浏览器如何下载文件(通过 HTTP 或 FTP)

http - 为什么有时我网站地址栏中的 https 会出现斜线?

php - 服务器可以阻止 curl 请求吗?

php - 抓取 Soundcloud 图像

php - 预填充文档签名模板字段

PHP 类不会返回字符串

java - Android HttpURLConnection 奇怪的响应