C# 如何将curl命令移植到RestSharp?如何排除故障?
我有一些用于web服务的curl命令,现在我想把它们移到C程序中。我正在使用RestSharp,并尝试使用最简单的web服务调用,但只是不断得到一条通用错误消息,我有点困惑如何对其进行故障排除 有没有办法查看发送的标题和确切的URL,以及接收的标题 旋度示例基本上如下所示:C# 如何将curl命令移植到RestSharp?如何排除故障?,c#,mono,restsharp,C#,Mono,Restsharp,我有一些用于web服务的curl命令,现在我想把它们移到C程序中。我正在使用RestSharp,并尝试使用最简单的web服务调用,但只是不断得到一条通用错误消息,我有点困惑如何对其进行故障排除 有没有办法查看发送的标题和确切的URL,以及接收的标题 旋度示例基本上如下所示: curl --user user:pw https://example.com/api/version 我的C代码是: var client = new RestClient("https://example.com");
curl --user user:pw https://example.com/api/version
我的C代码是:
var client = new RestClient("https://example.com");
client.Authenticator = new HttpBasicAuthenticator("user", "pw");
var request = new RestRequest ("api/version");
var response = client.Execute(request);
Console.WriteLine (response.Content);
Console.WriteLine (response.StatusCode);
Console.WriteLine (response.ErrorMessage);
这给了我:
RestSharp.RestRequest
0
Error getting response stream (Write: The authentication or decryption has failed.): SendFailure
我在Linux上使用Mono。这有关系吗?但是我可以在StackOverflow上找到一些更高级的问题,所以它应该可以工作
如果用户名/密码确实有问题,我会得到403状态,而不是零状态,我想
另外,如果有必要,我的脚本的其余部分是:
using System;
using System.Net;
using RestSharp;
namespace webtest
{
class MainClass
{
public static void Main (string[] args)
{
...(above code)
}
}
}
关于故障排除
到目前为止,我可以建议:
尝试注释验证器行,看看在我的案例中是否有任何更改,但它没有
尝试
尝试
这足以让我看到http URL工作,https URL失败
如果您需要更多的疑难解答,并且正在使用https,下面显示的sender参数包含有关发送到远程服务器的请求的各种字段
关于移植curl命令
默认情况下,linux上的curl使用它在/etc/ssl/certs中找到的证书。Mono的等效功能是执行mozroot-import-ask-remove,它将导入所有证书
另一种方法是将其放在程序的最顶端:
ServicePointManager.ServerCertificateValidationCallback +=
(sender, certificate, chain, sslPolicyErrors) => {
//Console.WriteLine(certificate.ToString());
return true;
};
注释行可用于向用户报告证书,以交互方式获得用户的批准,或根据预期指纹检查证书指纹。通过简单地返回true,意味着所有证书都是可信的且未经检查的
奖金:证书检查
以下是检查特定证书的一种方法:
ServicePointManager.ServerCertificateValidationCallback +=
(sender,certificate,chain,sslPolicyErrors) => {
if(((System.Net.HttpWebRequest)sender).Host.EndsWith("google.com") ){
if(certificate.GetCertHashString() == "83BD2426329B0B69892D227B27FD7FBFB08E3B5E"){
return true;
}
Console.WriteLine("Uh-oh, google.com cert fingerprint ({0}) is unexpected. Cannot continue.",certificate.GetCertHashString());
return false;
}
Console.WriteLine("Unexpected SSL host, not continuing.");
return false;
}