gpt4 book ai didi

c# - HTTP Post 请求返回 400 C#

转载 作者:行者123 更新时间:2023-11-30 12:25:29 24 4
gpt4 key购买 nike

我正在尝试发出 http post 请求以获取 api token 。如果成功,它应该返回访问 token 、 token 类型(承载)和 expires_in 的字符串值。

我的代码是一个通用代码,我希望它能正常工作。但是由于某些原因,它抛出了400“远程服务器返回错误。错误的请求”的异常。我一直在尽一切努力解决这个问题,但结果并没有改变。

当我调试代码并在输出窗口中看到结果时,数据流出现异常,提示“此流不支持查找操作”

Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();

我怀疑它是由于 postData 的编码方式而发生的。我的客户 secret 是这样的:

g/gOvqf5R+FTZZXbwsCbp0WsQjF9B0bl87IBQ8VAJ2Q=

它是否对 secret 本身中的字符进行编码,以便构造错误的请求?

我也在 POSTMAN 上试过了,它产生了一个结果,所以 api 什么都没有。它再次归结为请求内容。这是一个控制台应用程序。我在下面粘贴我的代码,感谢您提前提供的帮助。

public static APIModel GenerateApiKey()
{
var appSettings = ConfigurationManager.AppSettings;

try
{
var urlToCall = string.Format("https://app.example.com/token");
var uri = new Uri(urlToCall);

var request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";

string postData = "grant_type=client_credentials&client_id=" + appSettings["my_client_id"] + "&client_secret=" + appSettings["my_client_secret"];
byte[] byteArray = Encoding.UTF8.GetBytes(postData);

request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;


Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();

var response = (HttpWebResponse)request.GetResponse();

APIModel bearerToken;

using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
string jsonFromServer = sr.ReadToEnd();
bearerToken = JsonConvert.DeserializeObject<APIModel>(jsonFromServer);
}

response.Close();

return bearerToken;

}
catch (Exception e)
{
throw new Exception("Error getting a response from API " + e.Message);
}

}

最佳答案

由于您发送某种不正确的数据,远程服务器给您一个 400 错误。您可能能够获得响应并找出确切的错误 - 远程服务器很可能会为您提供更多信息。但是,我发现您的发布数据存在一个问题 - 客户端密码需要进行 URL 编码。查看它的内容,您会看到它以 = 符号结尾。这将被解释为一个特殊字符。我还想更明确地创建字符串,所以这对你有用:

var postItems = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("grant_type", "client_credentials"),
new KeyValuePair<string, string>("client_id", "client_credentials"),
new KeyValuePair<string, string>("client_secret", "client_credentials"),
};

string postData = string.Join("&",
postItems.Select (kvp =>
string.Format("{0}={1}", kvp.Key, HttpUtility.UrlEncode(kvp.Value))));

关于c# - HTTP Post 请求返回 400 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31312229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com