Преобразование PHP CURL-запроса в C # HttpWebRequest

Я использую HttpWebRequest в C #, чтобы сделать POST для конкретного API. Проблема в том, что система на другом конце не получает тело запроса. Более того, при попытке отправить запрос с помощью таких инструментов, как Postman, у меня возникает та же проблема. Единственная вещь, которая работает, это реализация PHP, подробно описанная ниже.
Мое лучшее предположение заключается в том, что мне не хватает какого-либо заголовка или другого, который PHP устанавливает автоматически.
Кто-нибудь сталкивался с подобной проблемой / кто-нибудь знает, что мне не хватает?

Обе реализации приведены ниже.

    <?php
error_reporting(E_ALL);
$url = <<the APIs url>>
$hash = base64_encode('<<username>>:<password>>');
$data = [];
$username  = <<username>>
$password =<password>>

$data = array(array(
"id"                => "9999999",
"status"            => 1,
<<rest of the formated data>>
));

$requestData = array(
'data'     => $data,
'hash'     => $hash
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($requestData));

$result = curl_exec($ch);
// $result = json_decode($result, true);

curl_close($ch);

die('done :'.$result);
?>

А вот и реализация C #:

    var httpWebRequest = (HttpWebRequest)WebRequest.Create(this.api_url);
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Method = "POST";
httpWebRequest.KeepAlive = true;
httpWebRequest.Date = DateTime.Now.Date;
httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
httpWebRequest.Headers.Add("Authorization", "Basic " + Base64Encode(userName + ":" + password));
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
tring requestResult = null;
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
requestResult= streamReader.ReadToEnd();
}

0

Решение

Если вы публикуете данные JSON, вы должны установить тип содержимого application/json,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]