首页 > 解决方案 > 如何使用代理在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;}
}

标签: c#jsonapiproxy

解决方案


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;
    }

推荐阅读