python urllib2.HTTPError:HTTP错误403:禁止

时间:2013-11-29 06:46:07

标签: python python-2.7 urllib

我想使用python将数据发送到远程服务器。

#!/usr/bin/python

import urllib

import urllib2

url = 'http://dev.bambeeq.com'

values = {'name' : 'Michael Foord',
          'location' : 'Northampton',
          'language' : 'Python' }

data = urllib.urlencode(values)

req = urllib2.Request(url, data)

response = urllib2.urlopen(req)

the_page = response.read()

运行此程序后。我收到了这个错误

urllib2.HTTPError: HTTP Error 403: Forbidden. 

如果你知道答案。请告诉我。

感谢您阅读..

3 个答案:

答案 0 :(得分:2)

403错误表示您无权访问该网站包含的信息。来自维基百科:

  

Web服务器可以返回403 Forbidden HTTP状态代码,以响应客户端对网页或资源的请求,以指示可以访问服务器并理解该请求,但拒绝采取任何进一步的操作。状态代码403响应是Web服务器被配置为由于某种原因拒绝客户端访问所请求资源的结果。

现在,这不是Python问题,而是Web服务器本身的问题,也许您需要在values列表中添加用户名和密码。

答案 1 :(得分:1)

问题出在http://dev.bambeeq.com/的服务器端 该网站也向我返回403,如果您按照预期使网络服务器正常工作,则可以重试该脚本。

答案 2 :(得分:0)

您是否可以访问http服务器日志? (如果它是Apache,通常是tail -f /var/log/apache2/error.log或类似的,以详细了解发生了什么)。

例如,我使用“海报”库解决了这个问题。 (只是“pip安装海报”)

from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import urllib2

register_openers()

datagen, headers = multipart_encode({"file": open("hello_world.txt", "rb")})
request = urllib2.Request("http://server.url/extras/upload_file.php", datagen, headers)
try:
    result = urllib2.urlopen(request)
except urllib2.HTTPError, e:
    print e.fp.read()

但正如您所看到的,我发送文件的URL不仅仅是一个目录:在服务器端,有一段代码(upload_file.php)等待发布数据:

<?php
if ($_FILES["file"]["error"] > 0){
        echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else{
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    move_uploaded_file($_FILES["file"]["tmp_name"],
    $_FILES["file"]["name"]);
    echo "Stored in: ". $_FILES["file"]["name"];
}
?>