0

对于我的应用程序,我需要使用验证码进行验证。我正在使用此链接:http: //vocublablair.nl/webservices/send.php

它返回一个类似这样的字符串:/webservices/simple-php-captcha.php?_CAPTCHA&t=0.59145200+1338304461

然后应该调用该链接,即: http://vocublablair.nl/webservices/simple-php-captcha.php?_CAPTCHA&t= 0.59145200+1338304461

当我使用相同的 HttpClient 调用它(因此使用正确的会话 cookie)时,它会出现以下错误:

java.lang.IllegalArgumentException: Illegal character in query at index 94: http://vocublablair.nl/webservices/simple-php-captcha.php?_CAPTCHA&t=0.59145200+1338304461
4

2 回答 2

1

最好的方法是生成您自己的验证码图像,因为使用第三方资源可能会给您的客户带来不便。要在 android 中生成验证码,您可以使用这个简单的库: http ://simplecaptcha.sourceforge.net/

于 2012-05-27T14:31:14.717 回答
0

我解决了以下问题:

首先,我返回的链接必须使用 HTML 编码:

Html.fromHtml(String)

调用正确的 URL:

content = sb.toString(); //the fetched link
String myCookie = "";
//get session cookie from other call.

List<Cookie> cookies = ((DefaultHttpClient)httpClient).getCookieStore().getCookies();
for(Cookie c : cookies){
if(c.getName().equals("PHPSESSID")){
    myCookie = c.getName() + "=" + c.getValue();
    break;
   }
   }

URL url = new URL(Html.fromHtml("http://vocublablair.nl" + content).toString());
URLConnection connection = url.openConnection();
connection.setDoInput(true);
connection.setRequestProperty("Cookie", myCookie);
connection.connect();
Bitmap bit = BitmapFactory.decodeStream(new FlushedInputStream((InputStream) connection.getContent()));

我正在使用 FlushedInputStream。在这里阅读:http: //twigstechtips.blogspot.com/2011/10/android-loading-jpgpng-images-from-url.html

于 2012-05-29T21:31:19.170 回答