我已经搜索了以下问题的解决方案但完全卡住了,我的问题是将以下代码转换为 .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?