В чем разница между этим почтовым веб-запросом и аналогичным запросом в Почтальоне? - PullRequest
0 голосов
/ 02 января 2019

Я хочу отправить запрос на "https://sslecal2.forexprostools.com/ajax.php". Итак, есть мой код:

        string URI = "https://sslecal2.forexprostools.com/ajax.php";
        string requestBody = String.Format("{{\"dateFrom\": \"{0}\", \"dateTo\": \"{1}\", \"timeZone\": {2}, \"action\": \"{3}\"}}",
                                           "2018-12-24", "2018-12-24", 18, "filter"); //json format

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URI);  //make request         
        request.Method = "POST";
        request.UserAgent = "";
        request.Headers.Add("X-Requested-With", "XMLHttpRequest");
        using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
        {
            writer.Write(requestBody); //write your request payload
        }

        WebResponse response = request.GetResponse();
        string jsonData = String.Empty;

        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            jsonData = reader.ReadToEnd();
        }
        response.Close();

Я сделал что-то не правильно в "requestBody" в строке "string requestBody = String.Format (" {{\ "dateFrom \" ... ", потому что я получаю 200 и пустой ответ HTML.

И я прикрепляю скрины того же запроса в почтальоне с html-кодом в ответе. Этот запрос в почтальоне обрабатывается хорошо.

Какая разница между этим веб-запросом Post и запросом в Postman? headers

body with answer

Ответы [ 2 ]

0 голосов
/ 02 января 2019

В PostMan, если вы нажмете «Код» в правом верхнем углу, под кнопкой отправки вы можете выбрать C # (RestSharp). Если вы не используете RestSharp, есть небольшая работа, которую нужно выполнить для преобразования это к чему-то другому, но основы все есть.

Вот вывод автогена для вашего случая (RestSharp):

var client = new RestClient("https://sslecal2.forexprostools.com/ajax.php");
var request = new RestRequest(Method.POST);
request.AddHeader("Postman-Token", "bfd1a3b3-983f-4160-a091-6f0962413e58");
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("X-Requested-With", "XMLHttpRequest");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("undefined", "dateFrom=2018-01-24&dateTo=2018-01-24&timeZone=18&action=filter", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

Для преобразования в HttpWebRequest требуется:

  • AddHeader -> Headers.Add
  • Укажите метод
  • Данные тела заданы иначе - возьмите строку PostMan и запишите ее в поток запросов

Или бесплатно установите RestSharp от NuGet

0 голосов
/ 02 января 2019

С почтальоном вы публикуете данные другого формата. Чтобы получить то же самое в коде, вам нужно изменить формат тела запроса и задать тип содержимого запроса:

string URI = "https://sslecal2.forexprostools.com/ajax.php";
string requestBody = String.Format("dateFrom={0}&dateTo={1}&timeZone={2}&action={3}",
"2018-12-24", "2018-12-24", 18, "filter"); //<-- Change this

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URI); 
request.Method = "POST";
request.UserAgent = "";
request.Headers.Add("X-Requested-With", "XMLHttpRequest");
request.ContentType = "application/x-www-form-urlencoded"; //<-- Add this
using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
    writer.Write(requestBody); 
}

WebResponse response = request.GetResponse();
string jsonData = String.Empty;

using (var reader = new StreamReader(response.GetResponseStream()))
{
    jsonData = reader.ReadToEnd();
}
response.Close();
...