3

JQuery の $.getJSON 関数から Web サービスを呼び出すと、正常に動作します。

    var p = {
       'field1': 'value1',
       'field2': 'value2',
       'field3': 'value3'
    };

    $.getJSON('https://service:xxx@xxx.xxx.yyyyy.com.xx/service/search?callback=?', p, function(data) {
    if (data[0]) {      
        // print results
    } else  {
        // no results found
    }
});

PHP と CURL から接続しようとしていますが、うまくいきません。常に false を返します。

//初挑戦

$params = array(  'field1' => 'value1',  'field2' => 'value2', 'field3'=> 'value3');
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, 'https://service:xxx@xxx.xxx.yyyyy.com.xx/service/search?callback=?');
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$result = curl_exec($ch); // return false instead of my JSON

// 2 回目の試行

    $data_string = json_encode($params);                                                                                   
    $ch = curl_init('https://https://service:xxx@xxx.xxx.yyyyy.com.xx/service/search?callback=?');                                                                      
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   

    $result2 = curl_exec($ch); //return false instead of my JSON

私が間違っていることは何ですか?

どうもありがとう、

4

3 に答える 3

1

コードを次のように変更してみてください。

$params = array(  'field1' => 'value1',  'field2' => 'value2', 'field3'=> 'value3');

$data_string = implode('&',$params);
//NB: you may need to urlencode the each of your params

$ch = curl_init('https://service:xxx@xxx.xxx.yyyyy.com.xx/service/search?  callback=?&' .$data_string);                                                                      
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    
$result2 = curl_exec($ch);

テストされていないコード、お役に立てば幸いです。

于 2012-11-07T05:46:42.390 に答える
0

jquery リクエストは GET を使用しています。あなたが書いたcurlコードは投稿リクエストを送信しているようです(私はcurlの専門家ではありません)。明らかに、受信サーバーはさまざまなタイプのリクエストを異なる方法で処理するため、curl を介して get を送信するようにしてください。

于 2012-11-07T01:31:09.710 に答える
0

getJSON は GET リクエストを送信するため、params 配列を http_build_query で文字列に変換してクエリに追加する必要があります。HTTPS を使用してデータを要求しているため、CURLOPT_CAINFO / CURLOPT_CAPATH を使用して CURL を有効な証明書にポイントする必要があります。コードの検証は無視します。

$params = array(  'field1' => 'value1',  'field2' => 'value2', 'field3'=> 'value3');
$url = 'https://service:xxx@xxx.xxx.yyyyy.com.xx/service/search?callback=?' . http_build_query($params);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch , CURLOPT_SSL_VERIFYPEER , false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);
if($result === FALSE) {
    echo curl_error($ch);
}
于 2012-11-07T09:20:40.673 に答える