Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java urllib2从启动的web服务返回HTTP 404_Java_Python_Web Services - Fatal编程技术网

Java urllib2从启动的web服务返回HTTP 404

Java urllib2从启动的web服务返回HTTP 404,java,python,web-services,Java,Python,Web Services,我有一个Spring3Web服务提供一些数据。它在Firefox上运行得非常好,但当我试图使用urllib2通过一个简单的Python脚本访问它时,我总是返回HTTP404 无论我是在Eclipse下通过Tomcat运行web服务,还是作为Windows服务运行Tomcat,都会发生这种情况 我能想到的唯一一件事(这似乎仍然不太可能)是web服务(幕后)对urllib2用户代理字符串不满意 有人能告诉我下一步该做什么吗 谢谢 米奇 下面是代码的简化版本,然后是屏幕输出: import sys i

我有一个Spring3Web服务提供一些数据。它在Firefox上运行得非常好,但当我试图使用urllib2通过一个简单的Python脚本访问它时,我总是返回HTTP404

无论我是在Eclipse下通过Tomcat运行web服务,还是作为Windows服务运行Tomcat,都会发生这种情况

我能想到的唯一一件事(这似乎仍然不太可能)是web服务(幕后)对urllib2用户代理字符串不满意

有人能告诉我下一步该做什么吗

谢谢

米奇

下面是代码的简化版本,然后是屏幕输出:

import sys
import urllib2
import urllib
import datetime
import time
import httplib
from datetime import timedelta

url = 'http://localhost:8086/OamDataWebService/oamdatawebservice/oamdata5    /SYRC01TAMP20/1334127600000/1334131199000'

handler=urllib2.HTTPHandler(debuglevel=1)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)

req = urllib2.Request(url=url)
req.add_header('Content-Type', 'text/xml')

try:
        resp = urllib2.urlopen(req)
except urllib2.HTTPError, e:
        print "ERROR: caught HTTPError exception"
        print "HTTP error code:", e.code
        print e.read()
        sys.exit(1)

content = resp.read()

print content
$python test.py send:'GET/OamDataWebService/OamDataWebService/oamdata5/SYRC01TAMP20/1334127600000/133413199000 HTTP/1.1\r\n接受编码:标识\r\n主机:tbdivb2400 2.corp.local:8086\r\n内容类型:text/xml\r\n连接:close\r\n用户代理:Python urllib/2.7\r\n\r\n' 答复:“找不到HTTP/1.1 404\r\n” 标题:服务器:apachecoyote/1.1 标题:内容类型:text/html;字符集=utf-8 标题:内容长度:952 标题:日期:2012年4月13日星期五13:56:28 GMT 标题:连接:关闭 错误:捕获到HTTPError异常 HTTP错误代码:404 ApacheTomcat/6.0.35-错误报告HTTP状态404-类型状态报告

消息描述请求的资源()不可用。

Apache Tomcat/6.0 .35

我想问题出在我的Spring控制器配置上,但我还是不明白 为什么它总是单向工作,而不是从Python开始。我现在正在从Chrome运行,我相信我正在发送相同的东西

当我通过urllib发送请求时,我的Tomcat日志显示以下内容:

2012-04-13 14:31:26782 WARN org.springframework.web.servlet.PageNotFound.handleNoSuchRequestHandlingMethod:142-找不到与servlet请求匹配的处理程序方法:路径“/oamdata5/SYRC01TAMP20/1334127600000/1334131199000”,方法“GET”,参数映射[[empty]]

我的Spring web.xml servlet映射是:

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

只需将用户代理设置为Firefox

headers = {"User-agent": "Mozilla/5.0"}
request = urllib2.Request(url, None, headers)
result = urllib2.urlopen(request)
html = result.read()

使用Wireshark捕获urllib2发送的请求。我想通过这种方式,您应该能够发现问题所在。

是什么产生了404?404页面的实际内容是什么(他们经常解释问题是什么)?你确定这是目的地网站吗?有时过滤防火墙会拒绝不通过内部身份验证代理的传出HTTP连接。代码是否成功地从其他外部网站获取HTTP内容



好的,因为服务器在同一台机器上,我们在Tomcat日志中得到一个错误,所以这不是防火墙问题。我的下一个建议是设置一个本地HTTP代理(参见示例或)。然后更改web浏览器配置以使用它。在代理中启用尽可能多的日志记录。从浏览器中获取页面,保存日志数据,然后尝试从python代码中获取数据(已将其更新为使用代理)。您应该能够通过比较代理记录的数据来找出关键差异。

您的演示代码在oamdata5之后的URL中包含一些空格。正确吗?

只需将用户代理设置为Firefox;-)。你能
wget
这个URL吗?很多服务器对Python用户代理不满意是有原因的。如果是这种情况,我的代码示例应该会有所帮助。您是否尝试过在服务器上运行一些“hello world”类型的应用程序,并通过Python获取HTML?我正在从Windows cmd.exe终端运行此应用程序,以Tomcat作为Windows服务在我自己的机器上运行。我已经验证了URL和Tomcat端口是否正确(它们在Firefox中工作)…James,是的,相同的代码可以从weather.yahoo.com(例如)获得数据。我不知道这是怎么得到的,真正的代码没有这个。。。我可以直接从Firefox复制URL,在那里没有问题。还是一样的问题。。。我整天都在看这个!我确实调出了Tomcat的日志,我看到了可能的大线索:
headers = {"User-agent": "Mozilla/5.0"}
request = urllib2.Request(url, None, headers)
result = urllib2.urlopen(request)
html = result.read()