自从去年1月以来,我一直使用curl从支付网关获取xml响应,并且在使用相同代码之前从大约5年开始。上周五它停止工作,代码没有被修改,主机和支付网关告诉我没有任何改变。
我已经做了多次测试来使用curl,fopen和file_get_contents访问url以尝试使其工作。我似乎能够访问谷歌,Facebook和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 );
}
我想知道它是否有任何问题,因为在其他主机上它每次都有效,并且它与主机一起工作,它只适用于我尝试的一半网站。
答案 0 :(得分:1)
如果不知道实际的网址,很难给出有效的回复。
一个问题可能是网址重定向,例如当某些人将domain.com重定向到www.domain.com时。
对于您可以使用的场景。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
请运行以下命令以获取有关所发生情况的更多信息。
print_r(curl_info($ch));
将该代码放在curl_exec
的正下方