2

私は昨年1月から支払いゲートウェイからxml応答を取得するためにcurlを使用しており、約5年前から同じコードを使用する別のゲートウェイの前に使用しています。先週の金曜日は動作を停止し、コードは変更されておらず、ホストと支払いゲートウェイの両方から、何も変更されていないことがわかりました。

curl、fopen、file_get_contentsを使用してURLにアクセスし、それを機能させるために複数のテストを実行しました。Google、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 );
}

別のホストでは毎回動作し、そのホストでは動作するので、私が試したサイトの半分でしか動作しないため、何か問題があるのではないかと思っていました。

4

1 に答える 1

1

実際のURLを知らずに有効な応答をすることは困難です。

1つの問題は、URLがリダイレクトされていることである可能性があります。たとえば、domain.comをwww.domain.comにリダイレクトする人がいます。

これらのシナリオでは、使用できます。

 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

以下のコマンドを実行して、何が起こったかに関する詳細情報を取得してください。

print_r(curl_info($ch));

そのコードをcurl_execのすぐ下に配置します

于 2012-07-10T18:25:09.520 に答える