我试图卷曲的请求转换为WebRequest
在C#中,但没能得到回应,因为它总是返回401未经授权错误如何将curl请求转换为C#中的WebRequest?
这里是工作卷曲要求:
curl -k -v https://api.demo.peertransfer.com/v1/transfers -H“Content-Type:application/json”-X POST -d“{\”provider \“:\”HUL \“,\”payment_destination \“:\”hult-applicationfee \“, \“amount \”:“29000”,“callback_url”:\“http://studentapplication.local/en/nextsteps \”,\“callback_id \”:\“abc1234546asas \”,\“dynamic_fields \”:{\“student_id \ “32453245 \”,\“ST udent_first_name \ “:\” 糖果\ “\ ”student_last_name \“:\ ”学生\“}}” -H “X-Peertransfer-文摘:zYUt + Pn0A06wsSbCrrbAZn68Aslq9CbSUAKBrUEwIzI =”
输出:
结果在红盒子是什么,我需要在WebRequest
反应得到, 这里是我的C#代码
private void testnewfunc()
{
string value = "{\"provider\":\"HUL\",\"payment_destination\":\"hult-applicationfee\",\"amount\":\"29000\",\"callback_url\":\"http://studentapplication.local/en/nextsteps\",\"callback_id\":\"abc1234546asas\",\"dynamic_fields\":{\"student_id\":\"32453245\",\"student_first_name\":\"Candy\",\"student_last_name\":\"Student\"}}";
var URI = new Uri("https://api.demo.peertransfer.com/v1/transfers");
byte[] data = System.Text.ASCIIEncoding.Default.GetBytes(value);
var requst = (HttpWebRequest)WebRequest.Create(URI);
requst.UserAgent = "curl/7.43.0";
requst.Method = "POST";
requst.KeepAlive = true;
requst.AllowAutoRedirect = true;
requst.ContentType = " application/json";
requst.ContentLength = data.Length;
// wc.Headers["Content-Type"] = "application/json";
requst.Accept = "*/*";
//Or any other encoding type.
string result = System.Convert.ToBase64String(data);
var uname = "hultdemo2015";
var pword = "gEejgC0GF8pCbI7C";
var creds = string.Format("{0}:{1}", uname, pword);
creds = Convert.ToBase64String(Encoding.ASCII.GetBytes(creds));
requst.Headers["Authorization"] = string.Format("{0} {1}", "Basic", creds);
requst.Headers["X-Peertransfer-Digest"] = string.Format("{0}", "zYUt+Pn0A06wsSbCrrbAZn68Aslq9CbSUAKBrUEwIzI=");
using (Stream stream = requst.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var httpResponse = (HttpWebResponse)requst.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
//Now you have your response.
//or false depending on information in the response
// return true;
}
}
不知道什么,我在作出错误。
你在你的'curl'例如没有'Authorization'头。你如何获得授权? –
curl请求的发送没有授权标头。 @Cᴏʀʏ – Ramesh
但是API需要C#代码的证书吗?这似乎很奇怪。你的'WebRequest'中的所有东西看起来都不错,但我会确切地知道你需要'user-agent'和'authorization'头文件。这就是你的'WebRequest'与curl请求不同的地方。 –