Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将curl命令移植到RestSharp?如何排除故障?_C#_Mono_Restsharp - Fatal编程技术网

C# 如何将curl命令移植到RestSharp?如何排除故障?

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");

我有一些用于web服务的curl命令,现在我想把它们移到C程序中。我正在使用RestSharp,并尝试使用最简单的web服务调用,但只是不断得到一条通用错误消息,我有点困惑如何对其进行故障排除

有没有办法查看发送的标题和确切的URL,以及接收的标题

旋度示例基本上如下所示:

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