3

Web サービスから PHP コードへのコンテンツ/配列の取得に問題があります。http://server1-xeon.asuscomm.com/currency/?amount=1.20,from=MYR,to=SGDのようにブラウザーに URL を入力すると、ブラウザーの結果は次のように表示されます: [ 1.20MYR 、0.39シンガポールドル]。私のPHPコードは次のようになります。

$ch = curl_init('http://server1-xeon.asuscomm.com/currency/?amount=1.20,from=MYR,to=SGD');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);
echo $content;

残念ながら、上記のコードを使用しても何も得られません。助けを求めています。ありがとう。

更新しました

 $data=array(
'amount'=>1.2,
'fromCurrency'=>'MYR',
'toCurrency'=>'SGD'
 );

 $data_string = json_encode($data);

 $ch = curl_init('http://server1-xeon.asuscomm.com/currency/WebService.asmx/YaHOO_CurrencyEx');

 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= curl_exec($ch);
curl_close($ch);
$obj = json_decode($content);
echo $obj;
4

2 に答える 2

2

このページには、JavaScript によって読み込まれる動的コンテンツが含まれています。たとえば、 view-source:http://server1-xeon.asuscomm.com/currency/?amount=1.20,from=MYR,to=SGD にアクセスすると、Google Chrome で表示できます。

ページのソース コード (ファイルhttp://server1-xeon.asuscomm.com/currency/JQuery/app_converter.js ) をよく見ると、このコードを使用して内部で交換データを取得していることがわかります。 :

$.ajax({type: "POST",
        url: "WebService.asmx/YaHOO_CurrencyEx",  // important: it's a relative URL!
        data: "{amount:" + amount + ",fromCurrency:'" + from + "',toCurrency:'" + to + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        beforeSend: function () {},
        success: function (data) {
            $('#results').html(' [ ' + amount + from + ' , ' + data.d.toFixed(2) + to + ' ] ');
        });

したがって、実際には、ページ上の動的コンテンツへのアクセスを避けるために、PHP でそのような要求を行うことができhttp://server1-xeon.asuscomm.com/currency/?amount=1.20,from=MYR,to=SGDます。

UPD: より完全な説明を追加しました。

ここに画像の説明を入力

http://server1-xeon.asuscomm.com/currency/?amount=1.20,from=MYR,to=SGDのページが読み込まれるまでに、このページの JavaScript コード (クライアントで実行されることを意味します)サーバーではなくブラウザーで) URL パラメーターを解析し、URL http://server1-xeon.asuscomm.com/currency/WebService.asmx/YaHOO_CurrencyExAJAX POSTに要求を行います。JSON ペイロードを渡し、次のような応答を取得します。したがって、 http://server1-xeon.asuscomm.com/currency/WebService.asmx/YaHOO_CurrencyExに直接リクエストを送信し、を渡し、JSON本文で を渡し、受信した JSON レスポンスを を使用してデコードできます。{amount:1.20,fromCurrency:'MYR',toCurrency:'SGD'}{"d":0.390360}POSTcurlamountfromCurrencytoCurrencyjson_decode($content);

于 2016-01-16T10:01:39.863 に答える
1

データはどのように見えるべきか? これを「UPDATED」からコードに追加して実行します。

$array["MYR"] = 1.2;
$array["SGD"] = doubleval($obj->d)

// Print simple array (print source for example)
echo "<pre>";
print_r($array);
echo "</pre>";

// Print true JSON-array
print_r(json_encode($array));

Web ブラウザには次のように表示されます。

Array
(
    [MYR] => 1.2
    [SGD] => 0.39036
)

{"MYR":1.2,"SGD":0.39036}

現時点では問題を理解できません。

戻り値 (数字) のみを出力する場合は、次のようにします。echo $obj->d;

于 2016-01-16T14:56:06.033 に答える