CURL仅在特定主机上的特定站点上不返回任何内容


CURL returns nothing only on certain sites on a certain host

自去年1月以来,我一直在使用curl从支付网关获得xml响应,在另一个使用相同代码的网关之前,我已经使用了大约5年。上周五它停止了工作,代码也没有修改,主机和支付网关都告诉我没有任何变化。

我已经用curl、fopen和file_get_contents进行了多次访问url的测试,试图使其发挥作用。我似乎可以访问谷歌、脸书和php.net等常见网站,但不能访问我想要的网站和我工作过的其他网站。

我用于测试的代码是:

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 1); // comment once in production
if(!curl_setopt($ch, CURLOPT_URL, $url)) {echo 'CURLOPT URL Error<p>';}
if(!curl_setopt($ch, CURLOPT_HEADER, 1)) {echo 'CURLOPT Header Error<p>';}
if(!curl_setopt($ch, CURLOPT_HTTPHEADER, array('POST /AUTHORIZE HTTP/1.0', 'MIME-Version: 1.0', 'Content-type: application/PTI21',
'Content-transfer-encoding: text', 'Request-number: 1', 'Document-type: Request'))) {echo 'CURLOPT HTTPHEADER Error<p>';}
if(!curl_setopt($ch, CURLOPT_TIMEOUT, 90)) {echo 'CURLOPT TIMEOUT Error<p>';} 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // gives error, but keeps xml formatting
$result=curl_exec ($ch);
curl_close ($ch);
echo $result;
$options = array(
    'return_info'   => true,
    'method'        => 'post'
);
$result = file_get_contents($url);
print_r($result);

$fd = fopen( $url, "r" );
if( !$fd )
{
    echo "Cannot open URL";
} else {
    while ( !feof( $fd ) ) {
        $buffer = fgets( $fd, 4096 );
        echo $buffer;
    }
    fclose ( $fd );
}

我想知道它是否有什么问题,因为在另一个主机上,它每次都能工作,而在它所在的主机上,我尝试的网站只有一半能工作。

如果不知道实际的URL,很难给出有效的响应。

一个问题可能是URL正在重定向,例如,当一些人将domain.com重定向到www.domain.com时。

对于这些场景,您可以使用。

 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

请运行下面的命令以获取有关所发生情况的更多信息。

print_r(curl_info($ch));

将该代码放在curl_exec 的正下方