JSOUP + multipart/form-data 响应
JSOUP + multipart/form-data response
一般来说,我需要通过 JSOUP 以 response multipart / form-data 的形式向站点发送数据
例如,采用一个简单的形式来生成您的查询。
<表单操作=«localhost:8000» 方法=«post» enctype=«multipart/form-data»
<输入类型=«文件»名称=«文件1»
<输入类型=«文件»名称=«文件2»
提交按钮
表格
Post 浏览器响应:
>Request Headers Provisional headers are shown Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Content-Type:multipart/form-data;
boundary=----WebKitFormBoundaryjtkXVNw9YVG1H2P9 Origin:null
Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (Windows NT 6.1;
WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106
Safari/537.36
X-DevTools-Emulate-Network-Conditions-Client-Id:8DCCE949-56FA-4AB0-81B7-DA2BC7960E5C
->Request Payload
------WebKitFormBoundaryjtkXVNw9YVG1H2P9 Content-Disposition: form-data; name=«text»
text default
------WebKitFormBoundaryjtkXVNw9YVG1H2P9 Content-Disposition: form-data; name=«file1»; filename="" Content-Type:
application/octet-stream
------WebKitFormBoundaryjtkXVNw9YVG1H2P9 Content-Disposition: form-data; name=«file2»; filename="" Content-Type:
application/octet-stream
------WebKitFormBoundaryjtkXVNw9YVG1H2P9--
我试过创建一个类似的请求,但是一直没有找到正确的方式,让服务器接收到请求。
我的代码:
Map<String, String> responseMap= new HashMap<String, String>();
String key1 = "------WebKitFormBoundary9A3GpeDAwfa0TBDK\r\n" +
"Content-Disposition: form-data; name=\"text\"\r\n\r\n";
String value1 = "text default";
headersMap.put(key1, value1);
String key2 = "\r\n------WebKitFormBoundary9A3GpeDAwfa0TBDK\r\n" +
"Content-Disposition: form-data; name=\"doc_sma_ref_file\"; filename=\"\"" +
"\r\nContent-Type: application/octet-stream\r\n\r\n";
String value2 = "";
headersMap.put(key2, value2);
String key3 = "\r\n------WebKitFormBoundary9A3GpeDAwfa0TBDK\r\n" +
"Content-Disposition: form-data; name=\"doc_val_ref_file\"; filename=\"\"" +
"\r\nContent-Type: application/octet-stream\r\n\r\n";
String value3 = "";
headersMap.put(key3, value3);
String key4 = "\r\n------WebKitFormBoundary9A3GpeDAwfa0TBDK--";
String value4 = "";
headersMap.put(key4, value4);
Connection.Response resBGT = Jsoup.connect(URL)
.header("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary9A3GpeDAwfa0TBDK")
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36")
.followRedirects(true)
.data(responseMap)
.cookies(cookies)
.ignoreHttpErrors(true)
.timeout(15000)
.method(Connection.Method.POST)
.execute();
也许有人有这方面的经验。如果你请发送正确的路径。
或许有机会看到一个请求生成jsoup
你可以使用Connection.data
的第三个参数:
File file1 = new File("C:/dir/file1.txt");
File file2 = new File("C:/dir/file2.txt");
FileInputStream fs1 = new FileInputStream(file1);
FileInputStream fs2 = new FileInputStream(file2);
Connection.Response response = Jsoup.connect("http://www.example.com")
.data("text", "value")
.data("file1", "filename", fs1)
.data("file2", "filename", fs2)
.userAgent("Mozilla")
.method(Method.POST)
.execute();
//Handle your response...
在 JSoup 1.12.1 之前,除非文件以 posting.
形式涉及,否则无法自动发送表单边界
从 1.12.1 开始,当 Content-Type
header 设置为 "multipart/form-data"
时,Jsoup 可以生成表单边界。自动生成mime边界的表单数据不再需要添加文件
Document doc = Jsoup.connect(echoUrl)
.header("Content-Type", "multipart/form-data")
.userAgent(browserUa)
.data("uname", "Jsoup", "uname", "Jonathan", "百", "度一下")
.post();
正如您在上面的代码中看到的,没有使用任何文件,但是 JSoup 将动态处理表单边界,因为内容类型是 multipart/form-data
.
来源:
- Issue 788 我可以发送请求 post multipart/form-data 没有文件附件
- Commit 56ea479 通过设置 header 允许多部分表单提交;自动添加边界。
一般来说,我需要通过 JSOUP 以 response multipart / form-data 的形式向站点发送数据
例如,采用一个简单的形式来生成您的查询。
<表单操作=«localhost:8000» 方法=«post» enctype=«multipart/form-data»
<输入类型=«文件»名称=«文件1»
<输入类型=«文件»名称=«文件2»
提交按钮
表格
Post 浏览器响应:
>Request Headers Provisional headers are shown Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Content-Type:multipart/form-data;
boundary=----WebKitFormBoundaryjtkXVNw9YVG1H2P9 Origin:null
Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (Windows NT 6.1;
WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106
Safari/537.36
X-DevTools-Emulate-Network-Conditions-Client-Id:8DCCE949-56FA-4AB0-81B7-DA2BC7960E5C
->Request Payload
------WebKitFormBoundaryjtkXVNw9YVG1H2P9 Content-Disposition: form-data; name=«text»
text default
------WebKitFormBoundaryjtkXVNw9YVG1H2P9 Content-Disposition: form-data; name=«file1»; filename="" Content-Type:
application/octet-stream
------WebKitFormBoundaryjtkXVNw9YVG1H2P9 Content-Disposition: form-data; name=«file2»; filename="" Content-Type:
application/octet-stream
------WebKitFormBoundaryjtkXVNw9YVG1H2P9--
我试过创建一个类似的请求,但是一直没有找到正确的方式,让服务器接收到请求。
我的代码:
Map<String, String> responseMap= new HashMap<String, String>();
String key1 = "------WebKitFormBoundary9A3GpeDAwfa0TBDK\r\n" +
"Content-Disposition: form-data; name=\"text\"\r\n\r\n";
String value1 = "text default";
headersMap.put(key1, value1);
String key2 = "\r\n------WebKitFormBoundary9A3GpeDAwfa0TBDK\r\n" +
"Content-Disposition: form-data; name=\"doc_sma_ref_file\"; filename=\"\"" +
"\r\nContent-Type: application/octet-stream\r\n\r\n";
String value2 = "";
headersMap.put(key2, value2);
String key3 = "\r\n------WebKitFormBoundary9A3GpeDAwfa0TBDK\r\n" +
"Content-Disposition: form-data; name=\"doc_val_ref_file\"; filename=\"\"" +
"\r\nContent-Type: application/octet-stream\r\n\r\n";
String value3 = "";
headersMap.put(key3, value3);
String key4 = "\r\n------WebKitFormBoundary9A3GpeDAwfa0TBDK--";
String value4 = "";
headersMap.put(key4, value4);
Connection.Response resBGT = Jsoup.connect(URL)
.header("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary9A3GpeDAwfa0TBDK")
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36")
.followRedirects(true)
.data(responseMap)
.cookies(cookies)
.ignoreHttpErrors(true)
.timeout(15000)
.method(Connection.Method.POST)
.execute();
也许有人有这方面的经验。如果你请发送正确的路径。 或许有机会看到一个请求生成jsoup
你可以使用Connection.data
的第三个参数:
File file1 = new File("C:/dir/file1.txt");
File file2 = new File("C:/dir/file2.txt");
FileInputStream fs1 = new FileInputStream(file1);
FileInputStream fs2 = new FileInputStream(file2);
Connection.Response response = Jsoup.connect("http://www.example.com")
.data("text", "value")
.data("file1", "filename", fs1)
.data("file2", "filename", fs2)
.userAgent("Mozilla")
.method(Method.POST)
.execute();
//Handle your response...
在 JSoup 1.12.1 之前,除非文件以 posting.
形式涉及,否则无法自动发送表单边界从 1.12.1 开始,当 Content-Type
header 设置为 "multipart/form-data"
时,Jsoup 可以生成表单边界。自动生成mime边界的表单数据不再需要添加文件
Document doc = Jsoup.connect(echoUrl)
.header("Content-Type", "multipart/form-data")
.userAgent(browserUa)
.data("uname", "Jsoup", "uname", "Jonathan", "百", "度一下")
.post();
正如您在上面的代码中看到的,没有使用任何文件,但是 JSoup 将动态处理表单边界,因为内容类型是 multipart/form-data
.
来源:
- Issue 788 我可以发送请求 post multipart/form-data 没有文件附件
- Commit 56ea479 通过设置 header 允许多部分表单提交;自动添加边界。