Skip to content

Commit 8c4fcee

Browse files
committed
obey request method when scrapy deploy is redirected to a new endpoint
1 parent 40667cb commit 8c4fcee

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

scrapy/commands/deploy.py

+25
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,14 @@ def run(self, args, opts):
6565
import setuptools
6666
except ImportError:
6767
raise UsageError("setuptools not installed")
68+
69+
urllib2.install_opener(urllib2.build_opener(HTTPRedirectHandler))
70+
6871
if opts.list_targets:
6972
for name, target in _get_targets().items():
7073
print "%-20s %s" % (name, target['url'])
7174
return
75+
7276
if opts.list_projects:
7377
target = _get_target(opts.list_projects)
7478
req = urllib2.Request(_url(target, 'listprojects.json'))
@@ -214,3 +218,24 @@ def _build_egg():
214218
def _create_default_setup_py(**kwargs):
215219
with open('setup.py', 'w') as f:
216220
f.write(_SETUP_PY_TEMPLATE % kwargs)
221+
222+
223+
class HTTPRedirectHandler(urllib2.HTTPRedirectHandler):
224+
225+
def redirect_request(self, req, fp, code, msg, headers, newurl):
226+
newurl = newurl.replace(' ', '%20')
227+
if code in (301, 307):
228+
return urllib2.Request(newurl,
229+
data=req.get_data(),
230+
headers=req.headers,
231+
origin_req_host=req.get_origin_req_host(),
232+
unverifiable=True)
233+
elif code in (302, 303):
234+
newheaders = dict((k, v) for k, v in req.headers.items()
235+
if k.lower() not in ("content-length", "content-type"))
236+
return urllib2.Request(newurl,
237+
headers=newheaders,
238+
origin_req_host=req.get_origin_req_host(),
239+
unverifiable=True)
240+
else:
241+
raise urllib2.HTTPError(req.get_full_url(), code, msg, headers, fp)

0 commit comments

Comments
 (0)