使用数组参数将POST cURL PHP请求转换为cURL命令行
问题描述:
I wrote this coden which is OK :
$veh['vehicleClass'] = 'Car';
$veh['category'] = 'Van';
$veh['make'] = 'RENAULT';
$veh['model'] = 'Scenic';
$veh['modelDescription'] = 'Turbopoooower';
$veh['firstRegistration'] = "201606";
$veh['mileage'] = "500";
$veh['damageUnrepaired'] = true;
$veh['condition'] = "USED";
$veh['internalNumber'] = "12";
$veh['price']['consumerPriceGross'] = "5400";
$ch = curl_init();
$proxy = PROXY_MOBILE_DE;
$proxy_port = PROXY_PORT_MOBILE_DE;
$loginpassw = LOGINPASSWD_MOBILE_DE;
$url='https://services.mobile.de/seller-api/sellers/1086/ads';
$headers = array();
$headers[] = "Content-Type: application/vnd.de.mobile.api+json";
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy_port);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, $loginpassw);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($vehicle));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$data = curl_exec($ch);
curl_close($ch);
I want to convert this code into cURL command line. I've tried this :
curl -k -x api.test.sandbox.mobile.de:8080 -basic -u XXX:YYY -d "vehicleClass=Car" -d "category=Van" -d "make=RENAULT" -d "model=Scenic" -d "modelDescription=Turbopoooower" -d "condition=USED" -d "damageUnrepaired=true" -d "firstRegistration=201606" -d "internalNumber=13" -d "mileage=500" -d "price[consumerPriceGross]=5400" -X POST "https://services.mobile.de/seller-api/sellers/1086/ads" -H "Accept: application/vnd.de.mobile.api+json
but this cURL command line doesn't work, maybe something wrong link to parameter price[consumerPriceGross]... Any idea ?
我写了这个coden,这是好的: p>
$ veh ['vehicleClass'] ='汽车';
$ veh ['category'] ='范';
$ veh ['make'] ='RENAULT';
$ veh ['model'] ='Scenic ';
$ veh ['modelDescription'] ='Turbopoooower';
$ veh ['firstRegistration'] =“201606”;
$ veh ['mileage'] =“500”;
$ veh [' damageUnrepaired'] = true;
$ veh ['condition'] =“USED”;
$ veh ['internalNumber'] =“12”;
$ veh ['price'] ['consumerPriceGross'] =“ 5400“;
$ ch = curl_init();
$ proxy = PROXY_MOBILE_DE;
$ proxy_port = PROXY_PORT_MOBILE_DE;
$ loginpassw = LOGINPASSWD_MOBILE_DE;
$ url ='https:// services .mobile.de / seller-api / sellers / 1086 / ads';
$ headers = array();
$ headers [] =“Content-Type:application / vnd.de.mobile.api + json “;
ncurl_setopt($ ch,CURLOPT_PROXY,$ proxy);
curl_setopt($ ch,CURLOPT_PROXYPORT,$ proxy_port);
curl_setopt($ ch,CURLOPT_PROXYTYPE,CURLPROXY_HTTP);
ncurl_setopt($ ch,CURL OPT_URL,$ url);
curl_setopt($ ch,CURLOPT_USERPWD,$ loginpassw);
ncurl_setopt($ ch,CURLOPT_CUSTOMREQUEST,“POST”);
ncurl_setopt($ ch,CURLOPT_HTTPHEADER,$ headers);
curl_setopt($ ch ,CURLOPT_POSTFIELDS,json_encode($ vehicle));
curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1);
ncurl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ ch,CURLOPT_SSL_VERIFYHOST,0);
$ data = curl_exec($ ch);
curl_close($ ch);
code> pre>
我想将此代码转换为cURL命令行。
我试过这个: p>
curl -k -x api.test.sandbox.mobile.de:8080 -basic -u XXX:YYY -d“vehicleClass = Car “-d”category = Van“-d”make = RENAULT“-d”model = Scenic“-d”modelDescription = Turbopoooower“-d”condition = USED“-d”damageUnrepaired = true“-d”firstRegistration = 201606“ -d“internalNumber = 13”-d“mileage = 500”-d“price [consumerPriceGross] = 5400”-X POST“https://services.mobile.de/seller-api/sellers/1086/ads”-H “接受:application / vnd.de.mobile.api + json
code> pre>
但是这个cURL命令行不起作用,可能是指向参数价格的错误链接[consumerPriceGross ] ...
任何想法? p>
div>
答
They API is expecting data in JSON format but that is doing a traditional application/x-www-form-urlencoded
POST request.
To get it to work, build a JSON string using some other utility and use that as for the POST data. To prevent curl from encoding the data, pass the -H "Content-type: application/json"
header option.
For example:
curl -k -x api.test.sandbox.mobile.de:8080 \
-basic -u XXX:YYY \
-H "Accept: application/vnd.de.mobile.api+json" \
-H "Content-type: application/json" \
-d '{"vehicleClass":"Car","category":"Van","make":"RENAULT","model":"Scenic","modelDescription":"Turbopoooower","firstRegistration":"201606","mileage":"500","damageUnrepaired":true,"condition":"USED","internalNumber":"12","price":{"consumerPriceGross":"5400"}}'
"https://services.mobile.de/seller-api/sellers/1086/ads"