2012-12-09 98 views
2

这是我的android应用程序中的httppost方法。它不接受lenthy网址。对于漫长的网址没有反应/例外。当我在浏览器中手动输入相同的URL时,它工作正常。任何人都可以在这里指出问题吗?HttpPost不接受Java中的冗长url

try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent();   

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

更新: 新增一个样本网址。在手动输入浏览器时,相同的网址可以正常工作,并提供响应。

url.com/data?format=json&pro={%22merchanturl%22:%22http://url.com/logo.pn‌​g%22,%22price%22:599,%22productDesc%22:%22Apple%2032GBBlack%22,%22prodID%22:%2291‌​3393%22,%22merchant%22:%224536%22,%22prourl%22:%22http://url.com/data%22,%22name%‌​22:%22Apple%2032GB%20%2D%20Black%22,%22productUrl%22:%22http://www.url.com/image.‌​jpg%22,%22myprice%22:550,%22mercname%22:%22hello%22,%22mybool%22:false} 
+0

其中是您正在使用的网址? –

+0

我无法透露网址。它的官方之一。它是一个API。当我在浏览器中手动输入时,相同的网址正常工作。 – intrepidkarthi

+0

那么我如何验证你的代码? –

回答

1
public void postData() { 
// Create a new HttpClient and Post Header 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php"); 

try { 
    // Add your data 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
    nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
    nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!")); 
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

    // Execute HTTP Post Request 
    HttpResponse response = httpclient.execute(httppost); 

} catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
} 
} 
+0

其实我在我的网址中有一个很长的jsonobject,像这样{“merchantPrice”:“7.69”,“merchantName”:“amazon.com”}。实际的网址有这么多json参数。这会工作吗? – intrepidkarthi

1

我想你的URL中包含的东西像index.php?call=getUsers&something=bla

为了解决这个问题,你可以使用NameValuePair

String url = "http://example.com/index.php"; 

ArrayList<NameValuePair> nvp = new ArrayList<NameValuePair>(); 
nvp.add(new BasicNameValuePair("call", "getUsers")); 
nvp.add(new BasicNameValuePair("something", "bla")); 

try { 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost(url); 
    post.setEntity(new UrlEncodedFormEntity(nvp)); 
    HttpResponse response = client.execute(post); 
    HttpEntity entity = response.getEntity(); 
    [...] 
} catch (Exception e) { 
    [...] 
} 
+0

其实我在我的网址中有一个很长的jsonobject,像这样{“merchantPrice”:“7.69”,“merchantName”:“amazon.com”}。实际的网址有这么多json参数。这会工作吗? – intrepidkarthi

+0

你可以试试我的下面的答案。 –

0

你可以用下面的代码试试。你应该有Json API

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.net.URL; 
import java.nio.charset.Charset; 

import org.json.JSONException; 
import org.json.JSONObject; 

public class JsonReader { 

    private static String readAll(Reader rd) throws IOException { 
    StringBuilder sb = new StringBuilder(); 
    int cp; 
    while ((cp = rd.read()) != -1) { 
    sb.append((char) cp); 
} 
return sb.toString(); 
    } 

    public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException { 
    InputStream is = new URL(url).openStream(); 
    try { 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); 
    String jsonText = readAll(rd); 
    JSONObject json = new JSONObject(jsonText); 
    return json; 
} finally { 
    is.close(); 
    } 
    } 

    public static void main(String[] args) throws IOException, JSONException { 
    JSONObject json = readJsonFromUrl("https://graph.facebook.com/19292868552"); 
    System.out.println(json.toString()); 
    System.out.println(json.get("id")); 
    } 
+0

我的json解析器工作正常。我的疑问是我有冗长的要求。这是问题所在。反应非常小。这不是问题。 – intrepidkarthi

+0

我希望冗长的网址不应该成为问题。如果您对请求网址有任何问题,请与我们分享。会尽力帮助你。 –

+0

它在这里。当我手动输入url时,它工作正常。 http://url.com/data?format=json&pro={%22merchanturl%22:%22http://url.com/logo.png%22,%22price%22:599,%22productDesc%22:%22Apple% 2032GBBlack%22%22prodID%22:%22913393%22%22merchant%22:%224536 22%,%22prourl%22:%22http://url.com/data%22,%22name%22:%22Apple% 2032GB%20%2D%20Black%22%22productUrl%22:%22http://www.url.com/image.jpg%22,%22myprice%22:550,%22mercname%22:%22hello%22% 22mybool%22:假} – intrepidkarthi