c# - 如何使用代理在c#中调用外部api
问题描述
我有一个 API 需要通过proxy调用。他们提供了代理 url 和端口号。我需要通过这些代理将值传递给 API。我如何实现它?
API 的请求参数如下。 {
“reqdata”:“一些数据”
“msgstr”:“0”
}
API 的 URL:- “xxxxxx”;
代理地址:- “xxxxxxx”; 端口:- “xxxxxx”;
我的代码如下
public async Task<String> GetDetails()
{
string apiURL= "https://some url";
string MyProxyHostaddress = "xxxxxx";
int MyProxyPort = 8080;
//Bypass SSL Verification
ServicePointManager.ServerCertificateValidationCallback +=
delegate (object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; };
var request = (HttpWebRequest)WebRequest.Create(apiURL);
request.Proxy = new WebProxy(MyProxyHostaddress , MyProxyPort);
request.Method = "POST";
request.ContentType = "application/json";
request.Accept = "application/json";
RequestClass obj = new RequestClass();
obj.reqdata= "some string";
obj.msgid = "0";
string json = JsonConvert.SerializeObject(obj);
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsJsonAsync(apiURL, obj);
string result = response.Content.ReadAsStringAsync().Result;
return null;
}
public class RequestClass
{
public string reqdata{get;set;}
public string msgid{get;set;}
}
解决方案
public async Task<String> RechargeWallet()
{
string apiURL =
ConfigurationManager.AppSettings["APIURL"].ToString();
string MyProxyHostString = ConfigurationManager.AppSettings["ProxyURL"].ToString();
int MyProxyPort = Convert.ToInt32(ConfigurationManager.AppSettings["ProxyPort"]);
var request = (HttpWebRequest)WebRequest.Create(apiURL);
request.Proxy = new WebProxy(MyProxyHostString, MyProxyPort);
request.Method = "POST";
request.ContentType = "application/json";
request.Accept = "application/json";
APIFormat req = new APIFormat();
req.reqdata = encryptedMessage;
req.msgid = "0";
string jsonReq = JsonConvert.SerializeObject(req);
using ( var streamwriter=new StreamWriter(request.GetRequestStream()))
{
streamwriter.Write(jsonReq);
}
var response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string s = sr.ReadToEnd();
string decryptedMessage = decryptMessage(s);
return decryptedMessage;
}
推荐阅读
- c# - 关闭主窗口时如何使用 DisplayAlert
- python - 使用 DATE 和特定时间过滤 pandas 数据框
- r - 尝试存储从函数估算的值失败
- oracle - plsql打印自定义对象
- azure - azure ad b2c mfa 无密码身份验证技术配置文件合并屏幕
- .net - LabView中使用.net设计用户界面,点击按钮时程序没有响应
- json - Flutter 无法加载资产 json
- javascript - 如何将数组转换为对象数组?
- google-apps-script - 如何发送带有数据输入选项的电子邮件?
- javascript - 查询。删除现有的处理程序并自己调用它们