我正嘗試使用Java將驗證碼提交給decaptcher.com。 Decaptcher並沒有很好的解釋如何使用他們的API,所以我想弄清楚如何使用HTTP POST請求來提交驗證碼。下面是示例代碼,我從他們的網站有:如何發送圖片作爲多部分POST請求的一部分 - Java HtmlUnit
<form
method="post"
action="http://poster.decaptcher.com/"
enctype="multipart/form-data">
<input type="hidden" name="function" value="picture2">
<input type="text" name="username" value="client">
<input type="text" name="password" value="qwerty">
<input type="file" name="pict">
<input type="text" name="pict_to" value="0">
<input type="text" name="pict_type" value="0">
<input type="submit" value="Send">
</form>
我應該發送POST請求一樣,到Web服務器,並得到一個字符串返回給我。這是我嘗試在Java中實現的。
public String getDecaptcherAnswer(String username, String password){
try{
URL decaptcherPostURL = new URL("http://poster.decaptcher.com/");
WebRequestSettings request = new WebRequestSettings(decaptcherPostURL, HttpMethod.POST);
request.setEncodingType(FormEncodingType.MULTIPART);
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair("function", "picture2"));
params.add(new NameValuePair("username", username));
params.add(new NameValuePair("password", password));
//I added this block in
File file = new File("captcha.png");
params.add(new KeyDataPair("pict", capFile, "png", "utf-8"));
//----------------------
params.add(new NameValuePair("pict_to", "0"));
params.add(new NameValuePair("pict_type", "0"));
request.setRequestParameters(params);
request.setUrl(decaptcherPostURL);
HtmlPage page = webClient.getPage(request);
System.out.println(page.asText());
System.out.println("--------------------------------------");
System.out.println(page.asXml());
return page.asText();
}catch (Exception e){
e.printStackTrace();
return null;
}
}
我應該將pict的值設置爲File對象而不是指向captcha存儲位置的String? (captcha.png是我想提交的圖像的名稱)。
請問我宣佈KeyValuePair爲: – Dylan 2010-08-03 01:57:18
//假裝我創建 「captcha.png」 File對象調用的文件 新KeyValuePair( 「PICT」 文件, 「PNG」, 「UTF-8」) 用UTF-8編碼PNG文件嗎? – Dylan 2010-08-03 02:00:59
我添加了一個我認爲應該可以工作的例子。我不確定utf-8字符集,也許你應該嘗試一下。 – 2010-08-03 10:11:31