如何将下面的CURL调用转换为c# ?


How do i convert the following CURL call to C#

我试图在应用程序中使用圣经API。下面是Curl调用

curl -L -u #{API Token}:X -k https://bibles.org/v2/verses/eng-GNTD:Acts.8.34.xml
  • -L选项告诉cURL遵循重定向。
  • -u选项指定使用HTTP基本认证的用户名和密码。API令牌作为用户名给出。密码为被服务器忽略,所以你可以放任何你想要的;在我们的例子中"X"。
  • -k选项用于告诉cURL不验证SSL证书。

现在文档给了我们使用这个API的PHP代码,如下所示

<?php
$token = '#{API Token}';
$url = 'https://bibles.org/v2/verses/eng-GNTD:Acts.8.34.xml';
// Set up cURL
$ch = curl_init();
// Set the URL
curl_setopt($ch, CURLOPT_URL, $url);
// don't verify SSL certificate
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// Return the contents of the response as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Follow redirects
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// Set up authentication
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$token:X");
// Do the request
$response = curl_exec($ch);
curl_close($ch);
print($response);
?>

我已经尝试在c#中将其更改为以下内容。然而,我得到一个401(未经授权的代码)。我做错了什么?

string apiToken = "#{myAPIToken}";
string url = "https://bibles.org/v2/verses/eng-GNTD:Acts.8.34.xml";
WebRequest myReq = WebRequest.Create(url); 
CredentialCache mycache = new CredentialCache();
myReq.Headers["Authorization"] = Convert.ToBase64String(Encoding.ASCII.GetBytes(apiToken + ":X"));
WebResponse wr = myReq.GetResponse();
Stream receiveStream = wr.GetResponseStream();
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
string content = reader.ReadToEnd();

我认为您缺少身份验证头的Basic部分。这是我在。net 4.6中要做的

var client = new HttpClient()
var auth = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{accountSid}:{token}"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", auth);

在你的例子中试试:

 myReq.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(apiToken + ":X"));