如何用 HttpClient 对象调用或类似方法替换 curl 调用?

Posted

技术标签:

【中文标题】如何用 HttpClient 对象调用或类似方法替换 curl 调用?【英文标题】:How do I replace curl invoke with HttpClient object invoke or some similar? 【发布时间】:2013-10-23 03:18:02 【问题描述】:

有一个代码可以在 geoserver 上创建新的 featureType:

string par = @"/c D:\curl-7.32.0-ssl-sspi-zlib-static-bin-w32\curl.exe -v -u admin:MYPASSWORD -XPOST -H ""Content-type: text/xml"" -d ""<featureType><name>" + name + @"</name><title>" + MyhtmlEncode(title) + @"</title></featureType>""  http://localhost:8080/geoserver/rest/workspaces/cite/datastores/postgis/featuretypes";
Process P = Process.Start(@"C:\Windows\System32\cmd.exe",par);

我想读取服务器的输出并处理错误,他们说我应该用HttpClient 替换 curl,但我不知道如何描述授权 (-u admin:MYPASSWORD)。

【问题讨论】:

【参考方案1】:

它看起来像基本身份验证,所以应该这样做。

        var httpClient = new HttpClient();
        var authHeader = new AuthenticationHeaderValue("basic", Convert.ToBase64String(Encoding.ASCII.GetBytes("admin:MYPASSWORD")));
        httpClient.DefaultRequestHeaders.Authorization = authHeader;

        var content = new StringContent("<featureType><name>" + name + @"</name><title>"  + MyHtmlEncode(title) + @"</title></featureType>" );
        content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
        var response = await httpClient.PostAsync("http://localhost:8080/geoserver/rest/workspaces/cite/datastores/postgis/featuretypes", content);

【讨论】:

以上是关于如何用 HttpClient 对象调用或类似方法替换 curl 调用?的主要内容,如果未能解决你的问题,请参考以下文章

如何用 HttpClient 替换 WebClient?

如何用函数或VBA调用(引用)另外一个工作表的数据

Delphi 如何用多线程进行数据采集

delphi 如何用消息发送一个记录

浅谈如何用JNI的代码调用java接口

看完这篇文章,包你懂得如何用Python实现聚类算法的层次算法!