Что должно быть эквивалентно этому коду в php - PullRequest
0 голосов
/ 02 мая 2020

Это код, который я конвертирую в php. Код ссылки

string Data = "{" +
" \"request\": { " +
    " \"header\": { " +
      " \"username\": \"YourUserName\"," +
      " \"password\": \"YourPassword\" " +
    "}," +
    " \"body\": {" +
      " \"diamond_id\": \"12345678\" " +
    "}" +
  "}" +
"}";

string URL = "https://technet.rapaport.com/HTTP/JSON/RetailFeed/GetSingleDiamond.aspx ";
WebRequest webRequest = WebRequest.Create(URL);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
Stream reqStream = webRequest.GetRequestStream();
string postData = Data;
byte[] postArray = Encoding.ASCII.GetBytes(postData);
reqStream.Write(postArray, 0, postArray.Length);
reqStream.Close();
StreamReader sr = new StreamReader(webRequest.GetResponse().GetResponseStream());
string Result = sr.ReadToEnd();

Я пробовал в php, как показано ниже. Но я не получил ожидаемого результата.

$jsonData = array(
"request" => array(
      "header" => array(
          "username"=>"YourUserName", 
          "password"=>"YourPassword"
       ),
       "body" => array(
          "diamond_id"  => "12345678"
       ),
   ), 
);


$url = "https://technet.rapaport.com/HTTP/JSON/RetailFeed/GetSingleDiamond.aspx ";

//Initiate cURL.
$ch = curl_init($url);

//Encode the array into JSON.
$jsonDataEncoded = json_encode($jsonData);

$var = $jsonDataEncoded;
for($i = 0; $i < mb_strlen($var, 'ASCII'); $i++){
   ord($var[$i]);
}

//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);

//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $var);

//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); 

//Execute the request
$resultt = curl_exec($ch);

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Попробуйте приложение "почтальон" https://www.postman.com/ это поможет вам ...

используя данные, приведенные здесь, что почтальон выводит

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://technet.rapaport.com/HTTP/JSON/RetailFeed/GetSingleDiamond.aspx",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"diamond_id\"\r\n\r\nsomeDiamondID\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--",
  CURLOPT_HTTPHEADER => array(
    "YourUserName: YourUserName",
    "cache-control: no-cache",
    "content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    "password: YourPassword"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
0 голосов
/ 08 мая 2020

Я решил эту проблему. И я конвертирую этот эквивалентный код в php, как показано ниже

$curl = curl_init();

curl_setopt_array($curl, array(

    CURLOPT_URL => "https://technet.rapaport.com/HTTP/JSON/RetailFeed/GetSingleDiamond.aspx",

    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_ENCODING => "",

    CURLOPT_MAXREDIRS => 10,

    CURLOPT_TIMEOUT => 0,

    CURLOPT_FOLLOWLOCATION => true,

    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

    CURLOPT_CUSTOMREQUEST => "POST",

    CURLOPT_POSTFIELDS =>"{\n\"request\": {\n\"header\": {\n\"username\": \"YourUserName\", \n\"password\": \"YourPassword\"\n\n}, \n\"body\": {\n\t\"diamond_id\": \"12345678\" \n}\n}\n}",
    CURLOPT_HTTPHEADER => array(
        'Content-Type' => 'application/x-www-form-urlencoded',
        'Content-Type' => 'text/plain',
        'Cookie'       => 'ASP.NET_SessionId=wvxova2bwht020vw4begtpiw'
    ),
));



$response = curl_exec($curl);

echo $response;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...