2013-06-06 65 views
0

我使用Hertz Api预订车辆查找服务来获得与所提供的行程讯息车辆列表。这种特定服务的文档都可以找到here如何将JSON发布到API端点?

注意:他们需要你有一个访问令牌来访问他们的开发文档,但你可以很容易地只填写表单得到一个。或者,你可以使用我在下面的()。

下面是我用

$action_uri = 'https://www.hertz.co.nz/rentacar/rest/home/form'; 
$post_fields  = array(
     'accessToken'  => '1616634772671643728-8915933508415978751', 
     'ageSelector'  => '21', 
     'continueButton'  => 'continue', 
     'dropoffDay'   => '6/6/2013', 
     'dropoffTime'  => '9:00', 
     'pickupDay'   => '5/6/2013', 
     'pickupHiddenEOAG' => 'AKLT50', 
     'pickupLocation'  => 'Auckland Airport', 
     'pickupTime'   => '09:00' 
); 
$data_string = json_encode($post_fields); 

$ch = curl_init($action_uri); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/Cookiejar.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/Cookiejar.txt'); 

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

$content   = curl_exec($ch); 
$headers   = curl_getinfo($ch); 
$error_number = curl_errno($ch); 
$error_message = curl_error($ch); 
curl_close($ch); 

print_r($content); 
var_dump($headers); 
var_dump($error_number); 
var_dump($error_message); 

根据他们的文档的代码,我需要JSON格式提交POST参数。因此,我将CURLOPT_HTTPHEADER设置为您在上面看到的内容。

我的问题是,我从$content越来越乱码数据这样

‹Eͱ‚0৸t щÕÉÅã`B8¤±´M[ ðº]¿Þýÿƒ¶î"Er˜½üÌ¿Iø ‡M{#µÎi›S:ŽcÒ¢qSR©DNÔ t¬bÆÍÀW’¶ªÃïý–zV5ú˜Sšz]ÂéÐZöÂÿÖK±Š·¯Þq¯áÁ;„´@f|'`00ÁkÐûŽ;Åõþ̲cIÖ„2´EË¥Åpó 

这是$headers

array 
    'url' => string 'https://www.hertz.co.nz/rentacar/rest/home/form' (length=47) 
    'content_type' => string 'application/json' (length=16) 
    'http_code' => int 400 
    'header_size' => int 479 
    'request_size' => int 694 
    'filetime' => int -1 
    'ssl_verify_result' => int 20 
    'redirect_count' => int 0 
    'total_time' => float 1.078 
    'namelookup_time' => float 0 
    'connect_time' => float 0.25 
    'pretransfer_time' => float 0.75 
    'size_upload' => float 261 
    'size_download' => float 187 
    'speed_download' => float 173 
    'speed_upload' => float 242 
    'download_content_length' => float -1 
    'upload_content_length' => float 0 
    'starttransfer_time' => float 1.078 
    'redirect_time' => float 0 
    'certinfo' => 
    array 
     empty 

输出正如你看到的,我HTTP_CODE 400这是一个坏请求。

任何想法,为什么这是?我是否将一个JSON变量发布到API权限?

回答

1

它`gziped答案。添加CURLOPT_ENCODING

curl_setopt($ch, CURLOPT_ENCODING, ''); 
+0

烨不是赫兹的文件,它的工作。想知道为什么这些信息不在他们的文档中。谢谢! – arvinsim

0

我觉得这些都是旧的链接现在,我可以在这些链接