我想要求进入网络服务
像我这样的参数
urlString = http://ip/autodownload/andro.php?key=apps.apk|2|bla.bla.bla
public void getRequest(String Url) {
Toast.makeText(this, "Tambah Data " + Url + " ", Toast.LENGTH_SHORT).show();
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
try {
System.out.println("tes");
HttpResponse response = client.execute(request);
Toast.makeText(this,request(response),Toast.LENGTH_SHORT).show();
String res = EntityUtils.toString(response.getEntity());
System.out.println(res);
Update(res);
} catch (Exception ex) {
Toast.makeText(this, "Gagal Konek Server !", Toast.LENGTH_SHORT).show();
}
}
如果我在浏览器中运行它没关系,但是当我在android中运行时它会出现这样的错误
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): FATAL EXCEPTION: main
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): java.lang.IllegalArgumentException: Illegal character in query at index 67: http://10.234.152.120/autodownload/andro.php?key=DeliverReceipt.apk|2|com.sat.deliver
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at java.net.URI.create(URI.java:970)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at com.sat.deliver.MenuUtama.getRequest(MenuUtama.java:140)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at com.sat.deliver.MenuUtama.requestParam(MenuUtama.java:118)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at com.sat.deliver.MenuUtama.onClick(MenuUtama.java:355)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.view.View.performClick(View.java:2408)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.view.View$PerformClick.run(View.java:8816)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.os.Handler.handleCallback(Handler.java:587)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.os.Handler.dispatchMessage(Handler.java:92)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.os.Looper.loop(Looper.java:123)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.app.ActivityThread.main(ActivityThread.java:4627)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at java.lang.reflect.Method.invokeNative(Native Method)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at java.lang.reflect.Method.invoke(Method.java:521)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at dalvik.system.NativeStart.main(Native Method)
我尝试使用Urlencoding和替换字符,但它不能正常工作
我该怎么办?谢谢你
的 *解决
我在urlString中创建替换字符,如:
urlString+="?key="+appName.trim().replace(".", "%2E")+"|2|".trim().replace("|", "%7C")+packageName.trim().replace(".", "%2E");
并且工作正常:)
答案 0 :(得分:13)
尝试编码您的网址
String link="http://example.php?string1="+URLEncoder.encode(string1)+"&string2="+URLEncoder
.encode(string2)+"&string3="+URLEncoder.encode(string3)+"&string4="+URLEncoder.encode(string4)+"";
答案 1 :(得分:0)
检查
String myurltoencode = "http://ip/autodownload/andro.php?key=apps.apk|2|bla.bla.bla";
URLEncoder.encode(myurltoencode,"UTF-8");
答案 2 :(得分:0)
这对我有用。假设您的IP地址中包含非法字符。然后将其转换为Base64代码并发送到您的服务器。
例如:
String ip_address = StaticClass.getIPAdress();
try {
// Sending side
byte[] data = ip_address.getBytes("UTF-8");
ip_address = Base64.encodeToString(data, Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
ip_address = "";
}
Write encode ip_address or any field you want inside your url. Decode the variables at your server. But i'm not sure if you are using : com.loopj.android.http.AsyncHttpClient.get
vkj
答案 3 :(得分:0)
在我的情况下,我附加的变量导致了问题。它有一个额外的空间(空格)。我修剪它,错误消失了。 “http://somewebsite.com/somefile?q=” + someVariable.trim()