gpt4 book ai didi

java - URLConnection 生成错误的 IP 校验和

转载 作者:行者123 更新时间:2023-12-01 15:06:04 25 4
gpt4 key购买 nike

我使用以下代码通过文件上传来上传多表单/数据表单:

    URL url = new URL(DEST_URL);
String boundary = "-----------------------------" + Long.toString(System.currentTimeMillis());
PrintWriter writer = null;
URLConnection con = url.openConnection();

con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("Accept-Charset", "utf-8");
con.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/json,application/xml;q=0.9,*/*;q=0.8");
con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
OutputStream output = con.getOutputStream();
InputStream input = new FileInputStream(new File(FILE_PATH));
writer = new PrintWriter(new OutputStreamWriter(output));

writer.println(boundary);
writer.println("Content-Disposition: form-data; name=\"input1\"");
writer.println();
writer.println("1234");

writer.flush();

writer.println(boundary);
writer.println("Content-Disposition: form-data; name=\"input1\"");
writer.println();
writer.println("asdf");

writer.flush();

writer.println(boundary);
writer.println("Content-Disposition: form-data; name=\"file1\"; filename=\"clicknpoint.png\"");
writer.println("Content-Type: image/png");
writer.println();

writer.flush();

int length = 0;
byte[] buffer = new byte[1024];

for(length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
writer.flush();
input.close();

writer.println();
writer.println(boundary + "--");

writer.flush();

input = con.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));

String cur = null;
StringBuffer buf = new StringBuffer();

while((cur = reader.readLine()) != null) {
buf.append(cur);
}

服务器无法识别请求中的参数。我用wireshark检查过,它们在那里,但IP头校验和是0x0000。我认为这是个问题。

知道这是从哪里来的吗?

最佳答案

我看到的唯一可能不正确的是您使用 println 来生成 HTTP 内容。根据您的平台,println 可能会输出单个 LF 字符,也可能会输出 CR LF 对。

HTTP 在每个 header 后面肯定需要 CRLF。请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4 。现在您的代码有违反 HTTP 协议(protocol)的风险。它可能适用于某些平台,但不适用于其他平台。此外,某些服务器可能会容忍违反协议(protocol)的行为,但其他服务器可能不会。侵入性最小的更改可能是将每个 println 更改为打印并显式添加 CRLF。

writer.print("Content-Disposition: form-data; name=\"input1\"\r\n");

这可能与您的问题无关,但在您加强与 HTTP 的一致性之前,您的代码将面临失败的风险。

关于java - URLConnection 生成错误的 IP 校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12936026/

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