如何从 URL 中获取字符串

Posted

技术标签:

【中文标题】如何从 URL 中获取字符串【英文标题】:How can I get a String from a URL 【发布时间】:2011-11-17 03:07:02 【问题描述】:

我的应用程序从 php Web 服务器获取大部分数据。

我的问题是服务器返回错误时。 错误不是 html 页面,而是简单的字符串。 例如:

ERROR001

可能代表无效名称。

这是我的代码:

String responseBody = null;
URL url = new URL(strUrl);
URLConnection connection;
connection = url.openConnection();
connection.setUseCaches(false);
InputStream isResponse = (InputStream) connection.getContent(); // on errors I get IOException here
responseBody = convertStreamToString (isResponse);

当我使用它时,我在 connection.getContent(); 上得到 IOException;

我也试过了:

HttpGet getMethod = new HttpGet(url);
String responseBody = null;
responseBody = mClient.execute(getMethod,mResponseHandler); // on errors I getClientProtocolException

但我在 mClient.execute 上得到 getClientProtocolException

知道如何将 ERROR001 之类的结果读入字符串吗?

【问题讨论】:

我对 PHP 相当陌生,但是您检查过从服务器返回的响应代码吗?一般来说,这是判断您是否收到有效回复的可靠方法。 这实际上与 PHP 没有任何关系。有一个异常被抛出并且没有在客户端被处理。需要 try/catch 而不是试图解释错误的响应正文。 我刚刚注意到,当网页的响应为“OK”时,我没有收到任何错误。仅当结果为“ERRORXXX”形式时才会发生异常 我同意 Paul Sasik - 添加 try/catch 块并在该块内尝试读取您的响应。 当我在我的 PC 浏览器上尝试 URL 时,我得到“ERRORXXX”,这正是我希望在我的应用程序中得到的。相反,我得到了一个例外。我想在客户端(我这边)检查它,但在我阅读它之前我得到了异常。 【参考方案1】:

问题是出错时,Http 标头是 HTTP 错误 500(内部服务器错误)。 为了阅读错误内容,我使用了以下代码:

    String responseBody = null;
    URL url = new URL(strUrl);
    HttpURLConnection connection;
    connection = (HttpURLConnection) url.openConnection();
    connection.setUseCaches(false);
    InputStream isResponse = null;
    try 
        isResponse = connection.getInputStream();
     catch (IOException e) 
        isResponse = connection.getErrorStream();
    
    responseBody = convertStreamToString (isResponse);

    return responseBody;

【讨论】:

【参考方案2】:
url = new URL(desiredUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

试试这个。 我认为您没有调用 connection.connect() 方法。

【讨论】:

【参考方案3】:

当您使用 HttpClien 时会发生什么? 你可能想试试这个:

String responseBody;

HttpGet request = new HttpGet("your url");
HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse = client.execute(request);
HttpEntity entity = httpResponse.getEntity();

if(entity != null)
    responseBody = convertStreamToString (entity.getContent());

【讨论】:

以上是关于如何从 URL 中获取字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何从freemarker中的字符串获取url

如何从给定字符串中获取数组中所有源url的值

如何使用正则表达式从 html 字符串中获取图像 url

如何从名称空间的 Django URL 中获取绝对字符串?

使用 PHP 从 URL 字符串中获取文件路径/扩展名 [重复]

如何从 URL 获取 JSON 字符串?