【问题标题】:Convert CURL to C#将 CURL 转换为 C#
【发布时间】:2018-08-29 06:20:05
【问题描述】:

我花了很长时间尝试各种不同的方法来将此 curl 转换为 c#。有人可以帮忙吗。 我正在尝试发布 http 帖子并不断收到错误 500。 这是我要转换的内容:

curl --user username:password -X POST -d "browser=Win7x64-C1|Chrome32|1024x768&url=http://www.google.com" http://crossbrowsertesting.com/api/v3/livetests/

这就是我目前所拥有的:

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(baseurl);
request.Method = "POST";
request.Accept = "application/json";
request.Credentials = new NetworkCredential(username, password);

var response = request.GetResponse();
string text;

using (var sr = new StreamReader(response.GetResponseStream()))
{
    text = sr.ReadToEnd();
    values.Add(text);
}

这个方法也试过了,还是不行:

List<string> data = new List<string>();
        data.Add("browser=Win7x64-C1|Chrome20|1024x768");
        data.Add("url=URL");
        data.Add("format=json");
        data.Add("callback=doit");
        var request = WebRequest.Create("CrossBrowserTestingURL");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.Credentials = new NetworkCredential(username, password);
        using (var writer = new StreamWriter(request.GetRequestStream()))
        {
            writer.Write("data=" + data);
        }

        var response = request.GetResponse();

        string text;

        using (var sr = new StreamReader(response.GetResponseStream()))
        {
            text = sr.ReadToEnd();
            values.Add(text);
        }

【问题讨论】:

标签: c# http post curl


【解决方案1】:

我修改了第一个,按照http://msdn.microsoft.com/en-us/library/debx8sh9(v=vs.110).aspx将数据写入请求流,这样可以吗:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(baseurl);
request.Method = "POST";
request.Accept = "application/json";
request.Credentials = new NetworkCredential(username, password);
request.UserAgent = "curl/7.37.0";
request.ContentType = "application/x-www-form-urlencoded";

using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
    string data = "browser=Win7x64-C1|Chrome32|1024x768&url=http://www.google.com";

    streamWriter.Write(data);
}

var response = request.GetResponse();
string text;

using (var sr = new StreamReader(response.GetResponseStream()))
{
    text = sr.ReadToEnd();
    values.Add(text);
}

【讨论】:

  • 不幸的是,这不起作用。仍然从服务器收到错误 500。 curl 有效,但 c# 方法无效。有什么想法吗?
  • 我已根据 API 文档更改了使用 JSON 的答案,您可以再试一次吗?
  • 不幸的是仍然返回错误 500 内部服务器错误:(
  • 我创建了一个帐号来调试,请求数据必须是表单格式,并且需要设置UserAgent。为了测试,我使用了 cURL 用户代理。我猜这个 API 毕竟还处于测试阶段!
  • 您需要在您的 request.ContentType 行之后添加一个 NameValueCollection。像下面这样:
    NameValueCollection collection = new NameValueCollection()
    collection.Add("username",value);
    collection.Add("密码", value);
    request.Headers.Add(collection);
【解决方案2】:

刚刚实现了一个实验性的ASP.NET Core app,它使用 Roslyn 将 curl 命令转换为 C# 代码

请尝试一下:
https://curl.olsh.me/

【讨论】:

    猜你喜欢
    • 2016-04-18
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多