2010-05-27 28 views
7

Tôi đang cố gắng sử dụng DefaultHttpClientHttpGet để thực hiện yêu cầu đối với dịch vụ web. Rất tiếc, URL dịch vụ web chứa các ký tự không hợp lệ như {(ex: domain.com/service/{username}). Rõ ràng là việc đặt tên dịch vụ web không được viết tốt nhưng tôi không thể thay đổi nó.Sử dụng HttpGet với các ký tự không hợp lệ trong URL

Khi tôi làm HttpGet(url), tôi nhận được rằng tôi có một ký tự không hợp lệ trong url (đó là {và}). Nếu tôi mã hóa URL trước đó, không có lỗi nhưng yêu cầu sẽ chuyển đến một URL khác mà không có gì.

Url, mặc dù có các ký tự không hợp lệ, hoạt động từ trình duyệt nhưng triển khai HttpGet không cho phép tôi sử dụng. Tôi nên làm gì hoặc sử dụng thay thế để tránh vấn đề này?

+0

Bạn đã thử sử dụng% 7B và% 7D, như vậy: domain.com/service/%7Busername%7D. Hoặc là những gì bạn có nghĩa là bằng cách mã hóa. – sblundy

Trả lời

9

http://java.sun.com/javase/6/docs/api/java/net/URLEncoder.html

Cụ thể:

String safeUrl = URLEncoder.encode("domain.com/service/{username}", "UTF-8"); 
+0

Hmm. Như tôi đã nói trong câu hỏi, tôi đã thử mã hóa (dòng chính xác như bạn) nhưng nó không hoạt động. Tôi đã thử lại ngay bây giờ và thành công! Cảm ơn. –

+0

Lần đầu tiên tôi thử và thất bại là do thời gian chờ kết nối hết hạn. –

1

Câu hỏi này là cũ nhưng nó đã giúp tôi và tôi chỉ muốn thêm cho bất cứ ai có thể đi qua mà tôi cố định vấn đề này trên ứng dụng của tôi với một biến thể của Mike trả lời.

String safeUrl = "domain.com/service/" + URLEncoder.encode("{username}", "UTF-8"); 

Tôi thấy mã hóa chỉ là các phần có liên quan, khi cố gắng mã hóa toàn bộ url gây ra lỗi cho tôi.

1

chúng tôi không nên sử dụng URLEncoder.encode cho phần địa chỉ của URL vì nó thay đổi sai http://domain.com/ {username} của bạn thành http% 3A% 2F% 2Fdomain.com% 2 {username} và bạn nên biết rằng nó sẽ thay thế tất cả các không gian với '+' thì tốt hơn là thay thế chúng bằng "% 20".

Ở đây, hàm này chỉ mã hóa phần cuối của URL của bạn là {username} hoặc tên tệp hoặc bất kỳ thứ gì có thể có ký tự không hợp lệ.

String safeUrl(String inUrl) 
{ 
    int fileInd = inUrl.lastIndexOf('/') + 1; 
    String addr = inUrl.substring(0, fileInd); 
    String fileName = inUrl.substring(fileInd); 
    String outUrl=null; 

    try { 
     outUrl = addr + URLEncoder.encode(fileName, "UTF-8"); 
     outUrl = outUrl.replace("+", "%20"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return outUrl; 
} 
Các vấn đề liên quan