为什么将c#http请求转换为java不起作用?

0vvn1miw  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(447)

我正在尝试更多地使用microsoft自定义visionknow。我需要发出一个http请求来发送要分析的图像。我成功地向c提出了请求,所以我知道信息是正确的。
然而,当我试图用java发出同样的请求时,我收到了一个http400错误。
我认为我没有在java中正确处理请求。是真的吗?
下面是代码片段。

c#:

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Prediction-Key", PredicitionKey);
using (var content = new 
ByteArrayContent(byteData))
{
  content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
  response = await client.PostAsync(url, content);
  Console.WriteLine(await response.Content.ReadAsStringAsync());
}

java 语:

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Prediction-Key", predicitionKey);
connection.setRequestProperty("Content-Type", "application/octet-stream");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.getOutputStream().write(data.getData());
connection.connect();

Reader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
lhcgjxsq

lhcgjxsq1#

首先,更换

connection.connect();

具有

connection.getResponseCode();

如果仍然不起作用,那么标题就是问题所在。
因为c代码运行成功
您的c#请求与fiddler中的java请求之间的唯一区别是java请求有两个附加头(accept,user agent)。
尝试显式设置它们

connection.setRequestProperty("Accept", "*/*");
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");

如果仍然不起作用,请尝试删除这两个标头或检查您在请求正文中发送的数据。

相关问题