10

मैं उदाहरण के लिए इस यूआरएल पर कार्रवाई करना चाहते हैं:सकते में खड़ी/पाइप पट्टी के साथ नहीं प्रक्रिया यूआरएल जावा/अपाचे HttpClient

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

जावा/अपाचे मुझे नहीं है क्योंकि यह कहा गया है कि लंबवत बार (" | ") अवैध है।

डबल स्लैश के साथ भागने के साथ-साथ काम नहीं करता है:

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

^कि रूप में अच्छी तरह से काम नहीं करता।

कोई सुझाव यह काम कैसे करें?

उत्तर

9

साथ URLEncoder.encode()

नोट का प्रयास करें: आप स्ट्रिंग है जिसके बाद action= नहीं 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

यह सही है। पूरे स्ट्रिंग को एन्कोडिंग विफल हो जाएगी क्योंकि यूआरआई एन्कोडेड 'http: //' को पहचान नहीं पाएगा। –

7

आपको %7C के रूप में URL में | को एन्कोड करना होगा।

उपयोग करने पर विचार HttpClient के URIBuilder जो जैसे आप के लिए भागने, का ख्याल रखता है:

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

करने के लिए इस उत्तर से [तरसेम द्वारा एक] (http अधिक वर्बोज़ है://stackoverflow.com/a/18316373/177710) लेकिन यह समझने में सहायता करता है कि यूआरआई में कौन से हिस्से हैं। दूसरी तरफ, यह 'यूआरआईबिल्डर' के कार्यान्वयन विवरण में अच्छी तरह छिपी हुई हैंडलिंग और एन्कोडिंग रखती है। – Oliver

0

आप का उपयोग कर URL पैरामीटर सांकेतिक शब्दों में बदलना कर सकते हैं URLEncoder:

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

यह सभी विशेष वर्ण सांकेतिक शब्दों में बदलना होगा, नहीं सिर्फ तुम्हारे लिए पाइप।

0

पोस्ट में हम पैरामीटर URL में संलग्न नहीं है सांकेतिक शब्दों में बदलना चाहिए। नीचे दिया गया कोड जोड़ता है और url आपके पैरामीटर को एन्कोड करता है। यह से लिया है: 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

उद्धरण: * "पोस्ट में हम यूआरएल को पैरामीटर संलग्न नहीं करते हैं।" * यह सच नहीं है। आप URL पैरामीटर का उपयोग करके POST अनुरोध में डेटा बहुत अच्छी तरह से भेज सकते हैं और यह किसी भी मानकों से टकरा नहीं है। – Oliver

0

मैं एक ही समस्या थी और मैं उसकी जगह का समाधान | इसके बारे में एक इनकोडिंग मूल्य के लिए =>% 7C और ir काम करता है

इस

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

से इस

post = new HttpPost("http://testurl.com/lists/lprocess?action=LoadList\\%7C401814\\%7C1"); 
संबंधित मुद्दे