PHP如何从Web服务获取内容?

时间:2016-01-16 09:52:43

标签: php curl php-curl

我在将内容/数组从Web服务获取到我的php代码时遇到问题。当我在浏览器中输入网址http://server1-xeon.asuscomm.com/currency/?amount=1.20,from=MYR,to=SGD时,浏览器中的结果显示如下:[1.20MYR,0.39SGD]。我的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;

2 个答案:

答案 0 :(得分:2)

此页面包含由JavaScript加载的动态内容。您可以在Google Chrome中看到它,例如访问http://server1-xeon.asuscomm.com/currency/JQuery/app_converter.js

如果您仔细查看页面的源代码(文件enter image description here),您会看到它使用此代码获取交换数据:

function () {
    var container = document.getElementById('data-table');
    var elements = container.getElementsByTagName("input");
    for (i = 0; i < elements.length; i++) {
        elements[i].on("ifChanged", handle_company_state(elements[i].attr('id')));
     }
}

function handle_company_state(element_id) {
    //....
}

因此,实际上您可以在PHP中提出此类请求,以避免访问$.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 + ' ] '); }); 页面上的动态内容。

<强> UPD: 我已经添加了更完整的解释。

http://server1-xeon.asuscomm.com/currency/?amount=1.20,from=MYR,to=SGD

加载http://server1-xeon.asuscomm.com/currency/WebService.asmx/YaHOO_CurrencyEx上的页面时,此页面上的JavaScript代码(表示它在客户端执行,在浏览器中执行,而不是在服务器上执行)解析URL参数并向网址http://server1-xeon.asuscomm.com/currency/WebService.asmx/YaHOO_CurrencyEx发出http://server1-xeon.asuscomm.com/currency/?amount=1.20,from=MYR,to=SGD次请求。它传递JSON有效负载AJAX POST并获得类似{amount:1.20,fromCurrency:'MYR',toCurrency:'SGD'}的响应。因此,您只需通过{"d":0.390360}向{{3}}发出直接POST请求,并在JSON正文中传递curlamountfromCurrency然后使用toCurrency解码收到的JSON响应。

答案 1 :(得分:1)

数据应如何显示?将此添加到您的代码中,来自&#34; UPDATED&#34;并运行:

$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));

在网络浏览器中,您会看到:

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

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

目前无法理解您的问题。

如果您只想打印返回值(数字),请执行以下操作:echo $obj->d;