如何通过HttpWebRequest发送数据?

问题描述 投票:0回答:0

我已经搜索了以下问题的解决方案但完全卡住了,我的问题是将以下代码转换为 .NET,也许我需要调用两次请求但第二次调用失败:

    //vba code
    With CreateObject("WinHttp.WinHttpRequest.5.1")
    //first call -----------------
        .Open "POST", Url1, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
        .setRequestHeader "Content-type", "application/x-www-form-urlencoded; charset=UTF-8"
        .send ("")
        res = .responseText
        Set js = JsonConverter.ParseJSON(res)
    //second call -----------------
        formData = "q=" & sMST & "&type=auto&token=" & js("token") & "&force-search=1"
        .Open "POST", Url2, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
        .setRequestHeader "Content-type", "application/x-www-form-urlencoded; charset=UTF-8"
        .send (formData)
        res = .responseText
    End With

public string Getrespondtxt(ref HttpWebRequest request, string turl, string send)
{
    request = HttpWebRequest.Create(turl) as System.Net.HttpWebRequest;
    
    request.Method = "POST";
    request.Accept = "application/json, text/javascript, */*; q=0.01";
    request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36";

    request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
    if (!string.IsNullOrEmpty(send))
    {
        //send string??
        byte[] bytes = Encoding.ASCII.GetBytes(send);
        request.ContentLength = bytes.Length;
        using (Stream reqstream = request.GetRequestStream)
        {
            reqstream.Write(bytes, 0, bytes.Length);
        }
    }
    else
    {
    }
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    //HttpStatusCode.OK
    string responseText = null;
    using (Stream reader = response.GetResponseStream())
    {
        using (StreamReader strear = new StreamReader(reader))
        {
            responseText = strear.ReadToEnd();
        }
    }
    return responseText;
}

第一次调用,这有效(相同的结果= responseText):

txt = Getrespondtxt(request, url1, null);

但第二次通话:

formData = "q=" + "187312723" + "&type=auto&token=" + gettoken("token").ToString() + "&force-search=1"; <-- checked and compared the value 
txt = Getrespondtxt(request, url2, formData);

我的成绩

vb 结果

我哪里做错了? 我如何发送类似于 .send(formData) 的字符串?类似于 WinHttp?

.net post httprequest httpwebrequest winhttprequest
© www.soinside.com 2019 - 2024. All rights reserved.