10

Nếu tôi muốn xử lý url này ví dụ:Không thể xử lý url với dọc quầy bar/ống trong Java/Apache HttpClient

post = new HttpPost("http://testurl.com/lists/lprocess?action=LoadList|401814|1"); 

Java/Apache sẽ không cho tôi bởi vì nó nói rằng thanh dọc (" | ") là bất hợp pháp.

thoát nó với dấu gạch chéo đôi không hoạt động cũng như:

post = new HttpPost("http://testurl.com/lists/lprocess?action=LoadList\\|401814\\|1"); 

^đó không làm việc là tốt.

Bất kỳ đề xuất nào về cách thực hiện công việc này?

Trả lời

9

thử với URLEncoder.encode()

Lưu ý: bạn nên mã hóa chuỗi đó là sau khi action= không complete URL

post = new HttpPost("http://testurl.com/lists/lprocess?action="+URLEncoder.encode("LoadList|401814|1","UTF-8")); 

refernce http://docs.oracle.com/javase/7/docs/api/java/net/URLEncoder.html

+2

Điều này là chính xác. Việc mã hóa toàn bộ chuỗi sẽ thất bại vì URI sẽ không nhận ra được mã hóa 'http: //'. –

7

Bạn phải mã hóa | trong URL dưới dạng %7C.

Xem xét sử dụng HttpClient của URIBuilder mà sẽ chăm sóc của thoát cho bạn, ví dụ:

final URIBuilder builder = new URIBuilder(); 
builder.setScheme("http") 
    .setHost("testurl.com") 
    .setPath("/lists/lprocess") 
    .addParameter("action", "LoadList|401814|1"); 
final URI uri = builder.build(); 
final HttpPost post = new HttpPost(uri); 
+0

Câu trả lời này là nhiều tiết hơn [một trong những do Tarsem] (http://stackoverflow.com/a/18316373/177710) nhưng giúp nhận ra những phần nào có trong URI. Mặt khác, nó giữ việc xử lý và mã hóa độc đáo ẩn trong các chi tiết thực hiện của 'URIBuilder'. – Oliver

0

Bạn có thể mã hóa các thông số URL bằng URLEncoder:

post = new HttpPost("http://testurl.com/lists/lprocess?action=" + URLEncoder.encode("LoadList|401814|1", "UTF-8")); 

này sẽ mã hóa tất cả các ký tự đặc biệt, không chỉ là đường ống, cho bạn.

0

Trong bài chúng tôi không đính kèm các thông số để url. Mã bên dưới sẽ thêm và urlHãy nhập tham số của bạn. Nó được lấy từ: http://hc.apache.org/httpcomponents-client-ga/quickstart.html

DefaultHttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost("http://testurl.com/lists/lprocess"); 

    List <NameValuePair> nvps = new ArrayList <NameValuePair>(); 
    nvps.add(new BasicNameValuePair("action", "LoadList|401814|1")); 
    httpPost.setEntity(new UrlEncodedFormEntity(nvps)); 
    HttpResponse response2 = httpclient.execute(httpPost); 

    try { 
     System.out.println(response2.getStatusLine()); 
     HttpEntity entity2 = response2.getEntity(); 
     // do something useful with the response body 
     // and ensure it is fully consumed 

     String response = new Scanner(entity2.getContent()).useDelimiter("\\A").next(); 
     System.out.println(response); 


     EntityUtils.consume(entity2); 
    } finally { 
     httpPost.releaseConnection(); 
    } 
+0

Trích dẫn: * "Trong bài đăng chúng tôi không đính kèm thông số vào url." * Điều này không đúng. Bạn có thể gửi dữ liệu rất tốt trong một yêu cầu POST bằng cách sử dụng các tham số URL và nó không va chạm với bất kỳ tiêu chuẩn nào. – Oliver

0

Tôi có cùng vấn đề và tôi giải quyết nó thay thế | cho một giá trị được mã hóa của nó =>% 7C và ir làm việc

Từ này

post = new HttpPost("http://testurl.com/lists/lprocess?action=LoadList|401814|1"); 

Để này

post = new HttpPost("http://testurl.com/lists/lprocess?action=LoadList\\%7C401814\\%7C1"); 
Các vấn đề liên quan