使用数组参数将POST cURL PHP请求转换为cURL命令行

使用数组参数将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"