开始以为是接口写的由问题,但是同事的python脚本却能够正常上传。后面测试发现,原来是与服务器接口的数据要求格式不同,经过修改代码后,能够正确发送。
##附上python的post的方式
files = {'img': (CAPTCHA_NAME, open(img_path, 'rb'), 'image/png', {})}
res = requests.post('http://0.0.0.0:1000/Test', files=files,timeout=3)
上面的代码只是一部分,看得出来,上面需要的files是一个KeyValuePair,key是string,value是元祖(参数名,流,类型);
因此检查代码发现我之前用的是文件流的方式,因此导致提示此错误。附上正确的C#代码
using (var client = new HttpClient(hch))
{
try
{
var img = new MultipartFormDataContent();
img.Add(new ByteArrayContent(buff), "img","captcha.png");
var hrm = new HttpRequestMessage(HttpMethod.Post, url);
hrm.Content = img;
var response = client.SendAsync(hrm, HttpCompletionOption.ResponseContentRead).Result;
Console.WriteLine($"{response.StatusCode} {(int)response.StatusCode}");
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
if (response.StatusCode == HttpStatusCode.InternalServerError)
err++;
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
这样格式就对应上来了。
主要的原因是HttpContent内容对不上导致服务器直接关闭了链接。
在此之前,我使用的是HttpContent是这样写的
img.Add(new ByteArrayContent(buff), "img");
//因此这个与接口所需参数不符