我想使用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.
如果你知道答案。请告诉我。
感谢您阅读..
答案 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"];
}
?>