python傳送HTTP POST請求

-牧野-發表於2018-06-03

1. 127.0.0.1和0.0.0.0


127.0.0.1是一個回送地址,指本地機,一般用來本機測試使用,使用127.0.0.1啟的服務只能在本地機器上訪問,使用0.0.0.0啟的服務可以在其他機器上通過網路訪問。


2. VMware 虛擬機器向主機做埠對映


虛擬機器的網路連線預設是 NAT模式(用於共享主機的IP地址),要在NAT模式下由虛擬機器提供網路服務,需要做埠對映。

VMware虛擬機器->編輯->虛擬網路編輯器:



主機和虛擬機器埠可以設定為一樣。設定完成之後就可以通過主機ip:埠號訪問虛擬機器了。


3. POST請求訪問url報錯Forbidden (CSRF cookie not set.)解決辦法


錯誤細節,在訪問端報錯:

raise HTTPError(req.get_full_url(),code,msg,hdrs.fp)
urllib2.HTTPError: HTTP Error 403: Forbidden
在服務端報錯:
Forbidden (CSRF cookie not set.):
解決辦法:

修改settings.py設定檔案,刪除掉這一行程式碼:

'django.middleware.csrf.CsrfViewMiddleware',

4. python傳送HTTP POST請求(json格式)到指定網址

#!/usr/bin/env python
#  -*- coding:utf-8 -*-

import urllib2
import json

def http_post(url,data_json):
    jdata = json.dumps(data_json)
    req = urllib2.Request(url, jdata)
    response = urllib2.urlopen(req)
    return response.read()

url = 'http://192.168.0.107:8000/medi_test'
data_json = {'name': 'cuiyongyuan','job':'hero'}
resp = http_post(url,data_json)
print(resp)

5. Django後端處理json格式的POST請求

def handle_post(request):
    if request.POST:
        req = json.loads(request.body)
        name = req.get('name')
        job = req.get('job')
        print(name,job)
        return_json = json.dumps((name,job))      
        return HttpResponse(return_json)
    else:
        return_json = 'POST only!'
        return HttpResponse(return_json)

相關文章