此Post webrequest和Postman中的类似请求有什么区别?

时间:2019-01-02 15:33:35

标签: c# post httpwebrequest postman

我要向“ 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();

我在字符串“ string requestBody = String.Format(“ {{\” dateFrom \“ ...”)的“ requestBody”中做了一些不正确的操作,因为我得到了200个空的html答案。

我在邮递员中用HTML代码附加了相同请求的屏幕。邮递员的这一要求处理得很好。

Postman中的Post Web请求和请求之间有什么区别? headers

body with answer

2 个答案:

答案 0 :(得分:1)

使用邮递员,您可以发布不同格式的数据。要在代码中得到相同的结果,您需要更改请求正文格式并设置请求的内容类型:

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();

答案 1 :(得分:0)

在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的字符串并将其写入请求流

或从NuGet免费安装RestSharp