0

我正在使用处理

我有一个服务器查询:

// temp 是一个包含这个 looong URL的字符串

try{
    xml = loadXML(temp);
    }catch(Exception e){
      e.printStackTrace();
    }

我故意在 URL 中犯了一个错误。当我将 URL 复制并粘贴到浏览器中(或在上面单击它)时,浏览器会显示一条很好的消息,说明所犯的错误。“缺少参数:autor”。我想访问此信息以将其显示给用户。但是 stackTrace 更加加密(粘贴在最后)并且不包含上面的有用消息......我怎么能得到那个消息?例如,如果我执行 loadStrings(" http://stackoverflow.com ") ,我将所有 HTML 作为字符串,这对我来说已经足够了,但是上面 url 中的错误 500 我得到了一个错误并且没有到达HTML,但浏览器确实......如何?服务器是否提供一些备用 html?有这个地址吗?需要更多信息吗?

处理 2.0 愿意与 JavaScript 兼容。

谢谢

这是错误页面中的html:

    <html>
      <head></head>
      <body>
      <pre style="word-wrap: break-word; white-space: pre-wrap;">Missing parameter:                   autor. </pre>                
      </body>
    </html>

“Java.io.IOException:服务器返回 HTTP 响应代码:500 用于 URL:http ://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ListarProposicoes?sigla=PL&numero=&ano=1960&datApresentacaoIni=&datApresentacaoFim=&parteNomeAutor=&siglaPartidoAutor =&siglaUFAutor=&generoAutor=&IdSituacaoProposicao=&IdOrgaoSituacaoProposicao=&&codEstado=&codOrgaoEstado=&emTramitacao=在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436) 在 java.net.URL.openStream(URL.java:1010) 在 processing.core.PApplet.createInputRaw(PApplet.java:6960 ) 在 processing.core.PApplet.createInput(PApplet.java:6928) 在 processing.core.PApplet.createReader(PApplet.java:6722) 在 processing.core.PApplet.loadXML(PApplet.java:6070) 在 processing.core .PApplet.loadXML(PApplet.java:6060) at buildingQuery2_class$Query.makeQuery(buildingQuery2_class.java:161) at buildingQuery2_class.setup(buildingQuery2_class.java:23) at processing.core.PApplet.handleDraw(PApplet.java:2245)在 processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243) 在 processing.core.PApplet.run(PApplet.java:2141) 在 java.lang.Thread.run(Thread.java:680)http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ListarProposicoes?sigla=PL&numero=&ano=1960&datApresentacaoIni=&datApresentacaoFim=&parteNomeAutor=&siglaPartidoAutor=&siglaUFAutor=&generoAutor=&IdSituacaoProposicao=&IdOrgaoSituacaoProposicao=&codeo=Estcaado=&codE不存在或无法读取 java.net.URL.(URL.java:601) 的 java.net.URL.(URL.java:464) 的 java.net.URL.(URL) 的 java.net.MalformedURLException .java:413) 在 com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:649) 在 com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector .java:186) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration .java:737) 在 com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) 在 com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser .java:232) 在 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284) 在 processing.data。XML.(XML.java:170) 在 processing.core.PApplet.loadXML(PApplet.java:6070) 在 processing.core.PApplet.loadXML(PApplet.java:6060) 在 buildingQuery2_class$Query.makeQuery(buildingQuery2_class.java: 161) 在 processing.core.PApplet.handleDraw(PApplet.java:2245) 在 processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243) 在 processing.core.PApplet 的 buildingQuery2_class.setup(buildingQuery2_class.java:23)。在 java.lang.Thread.run(Thread.java:680) 处运行(PApplet.java:2141)java:243) 在 processing.core.PApplet.run(PApplet.java:2141) 在 java.lang.Thread.run(Thread.java:680)java:243) 在 processing.core.PApplet.run(PApplet.java:2141) 在 java.lang.Thread.run(Thread.java:680)

4

1 回答 1

0

我从PhiLho 的处理论坛中得到了一个很好的答案。我将把它留在这里以供未来可能的读者使用:

//code from PhiLho at:
//http://forum.processing.org/topic/how-can-i-get-html-error-description-from-server-when-loading-xml

import java.net.*;
import java.io.*;
String url1 = "http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ListarProposicoes?sigla=PL&numero=&ano=1960&datApresentacaoIni=&datApresentacaoFim=&parteNomeAutor=&siglaPartidoAutor=&siglaUFAutor=&generoAutor=&IdSituacaoProposicao=&IdOrgaoSituacaoProposicao=&&codEstado=&codOrgaoEstado=&emTramitacao=";
String url2 = "http://Processing.org";
// With information frm http://stackoverflow.com/questions/4596447/java-check-if-file-exists-on-remote-server-using-its-url
URL url = null;
try
{
  url = new URL(url1);
}
catch (MalformedURLException e)
{
  println("Error in URL " + e);
  exit();
}

HttpURLConnection connection = null;
try
{
  connection = (HttpURLConnection) url.openConnection();
  connection.setRequestMethod("GET");
  int code = connection.getResponseCode();
  if (code != HttpURLConnection.HTTP_OK)
  {
    println("Answer: " + code + " - " + connection.getResponseMessage());
    InputStream error = connection.getErrorStream();
    if (error != null)
    {
      println("Error response:");
      String[] lines = loadStrings(error);
      println(lines);
      error.close();
    }
    println("Error header:");
    String field = null;
    int i = 0;
    do
    {
      field = connection.getHeaderField(i);
      String key = connection.getHeaderFieldKey(i);
      if (field != null)
      {
        println("Header " + i + ": " + (key == null ? "" : key + "=") + field);
      }
      i++;
    } while (field != null);
    println("End in error");
    exit();
  }
}
catch (IOException e)
{
  println("Error in I/O " + e);
  exit();
}
println("Correct data:");
InputStream input = null;
try
{
  connection = (HttpURLConnection) url.openConnection();
  connection.setRequestMethod("GET");
  input = connection.getInputStream();
  String[] lines = loadStrings(input);
  println(lines);
}
catch (IOException e)
{
  println("Error " + e);
}
finally
{
  if (input != null)
  {
    try { input.close(); } catch (IOException e) {}
  }
}
exit();
于 2013-07-13T03:10:56.070 回答