Php 使用cURL获取错误代码28

Php 使用cURL获取错误代码28,php,json,curl,Php,Json,Curl,这个问题已经解决了-请参阅本文末尾的答案 我正在尝试使用PHP/cURL从远程服务器检索数据 如果我将以下URL放入浏览器,数据将正确返回 然而,当我尝试使用PHP/cURL访问if时,它只是超时(错误代码28) } 有人知道为什么它是通过浏览器而不是通过cURL工作的吗?谢谢 附加信息 而cURL不适用于上面的URL。对于下面的URL,它可以正常工作。唯一的区别是请求数据的服务器。数据本身和POST是相同的 回答 最后回到这里,发现推荐人就是问题所在。服务器希望在请求标头中看不到任何引用。

这个问题已经解决了-请参阅本文末尾的答案

我正在尝试使用PHP/cURL从远程服务器检索数据

如果我将以下URL放入浏览器,数据将正确返回

然而,当我尝试使用PHP/cURL访问if时,它只是超时(错误代码28)

}

有人知道为什么它是通过浏览器而不是通过cURL工作的吗?谢谢

附加信息 而cURL不适用于上面的URL。对于下面的URL,它可以正常工作。唯一的区别是请求数据的服务器。数据本身和POST是相同的

回答


最后回到这里,发现推荐人就是问题所在。服务器希望在请求标头中看不到任何引用。当它这样做时,请求被阻止。当时,这种行为可能在所有服务器上都不一致,但现在是这样。从请求头中删除referer并保持其他所有内容不变,现在就可以了。

cURL函数和直接请求信息之间的最大区别是
CURLOPT_头的属性,我会首先尝试从代码中删除它

试试这个

function get_data($url)
 {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
 }

 $returned_content = get_data('your url');
或者,您可以远程使用
文件获取内容
功能,但许多主机不允许这样做

$userAgent = ‘Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0’;
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
我使用的其他一些选项:

curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
试试这个:

 $ctx = stream_context_create( array(
                 'socket' => array(
                             'bindto' => '192.168.0.107:0',
    )
   ));

   $c= file_get_contents('http://php.net', 0, $ctx);

顺便说一句,试着删除
CURLOPT_USERAGENT
,这应该没什么大不了的,但除非绝对需要,否则我会删除它。我试着删除
CURLOPT_HTTPHEADER
CURLOPT_USERAGENT
,但仍然没有什么乐趣。尝试继续超时。发现推荐人是问题所在。我已经更新了操作。再次感谢您的帮助:)谢谢您的建议。我现在正在测试各种卷曲选项<代码>文件\u获取\u内容
不起作用。我在原来的问题中添加了一些额外的信息。因为cURL确实适用于一个URL,但不适用于发布的原始URL。然而,它们实际上是相同的。唯一的例外是远程服务器。发现引用者是问题。我已经更新了OP。再次感谢您的帮助:)是否有任何原因导致两个URL中的用户ID不同?这是因为每台服务器有1台吗?这是不寻常的,因为用户ID通常在单个服务中都是通用的。如果发现问题出在推荐人身上。我已经更新了OP。
 $ctx = stream_context_create( array(
                 'socket' => array(
                             'bindto' => '192.168.0.107:0',
    )
   ));

   $c= file_get_contents('http://php.net', 0, $ctx);