https://docs.python-requests.org/zh_CN/latest/api.html#id2
https://github.com/psf/requests

get ,post

(1) 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
(2) GET方式提交的数据最多只能有1024 Byte,而POST则没有此限制。
(3) 安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。

表单提交中get和post方式的区别归纳如下几点:
(1)get是从服务器上获取数据,post是向服务器传送数据。
(2)对于表单的提交方式,在服务器端只能用Request.QueryString来获取Get方式提交来的数据,用Post方式提交的数据只能用Request.Form来获取。
(3)一般来说,尽量避免使用Get方式提交表单,因为有可能会导致安全问题。比如说在登陆表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。但是在分页程序中,用Get方式就比用Post好。

HTTP POST和GET的区别

1、HTTP 只有POST和GET 两种命令模式;

2、 POST 是被设计用来向上放东西的,而GET是被设计用来从服务器取东西的,GET也能够向服务器传送较少的数据,而Get之所以也能传送数据,只是用来设计告诉 服务器,你到底需要什么样的数据.POST的信息作为HTTP 请求的内容,而GET是在HTTP 头部传输的;

3、POST与GET在HTTP 中传送的方式不同,GET的参数是在HTTP 的头部传送的,而Post的数据则是在HTTP 请求的内容里传送;

4、POST传输数据时,不需要在URL中显示出来,而GET方法要在URL中显示;

5、 GET方法由于受到URL长度的限制,只能传递大约1024字节;POST传输的数据量大,可以达到2M,而根据微软方面的说法,微软对用 Request.Form() 可接收的最大数据有限制,IIS 4 中为 80 KB 字节,IIS 5 中为 100 KB 字节;

6、SOAP是依赖于HTTP POST模式实现的;

  1. import request,tune ,base64
  2. def run(filename):
  3. key = 'comparenose/'
  4. request_url = 'http://0.0.0.0:8000/' + 'comparenose/'
  5. file1 = filename
  6. f = open(file1, 'rb')
  7. img = base64.b64encode(f.read())
  8. nowtime = str(int(time.time()))
  9. useid = 'asdfghjkl'
  10. sign = data_verification(key,useid,nowtime)
  11. print(nowtime)
  12. params = {}
  13. params['useid'] = useid
  14. params['sign'] = sign
  15. params['timestamp'] = nowtime
  16. headers = {'content-type': 'application/x-www-form-urlencoded'}
  17. headers = {}
  18. headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36'
  19. headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
  20. response = requests.post(request_url, data=params,headers = headers,files= {"file":open(filename, 'rb'),"file2":open(filename, 'rb') })
  21. print(response)
  22. print(dir(response))
  23. if response:
  24. print (response.json())
  1. # django
  2. def predict_view(request):
  3. '''
  4. file
  5. timestamp
  6. sign
  7. userid
  8. '''
  9. # print(dir(request),type(request), request.method,request.POST, request.GET,'<<<<<<<<<<<<<<<<<<<')
  10. url = request.build_absolute_uri()
  11. url = 'run/'
  12. print(request.build_absolute_uri(),request.path_info,request.path,' test1')
  13. if request.method in [ 'POST' ,'GET'] : # 当提交表单时
  14. dic={}
  15. # 判断是否传参
  16. nowtime=str(int(time.time()))
  17. file_f,file_useid, file_timestamp,file_sign= None,None,None,None
  18. if request.method == 'POST' :
  19. file_f1= request.FILES.get("file", None )
  20. file_f2= request.FILES.get("file2", None)
  21. file_useid = request.POST.get('useid','USEID')
  22. file_timestamp = request.POST.get('timestamp','TIMESTAMP')
  23. file_sign = request.POST.get('sign','SIGN')
  24. # file1 = request.P
  25. elif request.method == 'GET' :
  26. file_f1= request.FILES.get("file", None)
  27. file_f2= request.FILES.get("file2", None)
  28. file_useid = request.GET.get('useid','USEID')
  29. file_timestamp = request.GET.get('timestamp','TIMESTAMP')
  30. file_sign = request.GET.get('sign','SIGN')
  31. veri,msg = time_verification(file_timestamp,nowtime)
  32. if not veri:
  33. data={
  34. 'state': False,
  35. 'data': {'img':''},
  36. 'msg': 'error(time param verification) ) ' + str(msg),
  37. }
  38. return HttpResponse(json.dumps(data))
  39. veri,msg = data_verification(url,file_useid,file_timestamp,file_sign)
  40. if not veri:
  41. data={
  42. 'state': False,
  43. 'data': {'img':''},
  44. 'msg': 'error(md5 param verification) ) ' + str(msg),
  45. }
  46. return HttpResponse(json.dumps(data))
  47. # file_f11 = deepcopy(file_f1)
  48. # image1 = Image.open(io.BytesIO(file_f1.read()))
  49. image1 = cv2.imdecode(np.fromstring(file_f1.read(), np.uint8), cv2.IMREAD_COLOR)
  50. # # 将bgr转为rbg np.fromstring(photo,np.uint8)
  51. image1 = cv2.cvtColor(image1, cv2.COLOR_RGB2BGR)

Response

django 接口测试时保存Forbidden (CSRF cookie not set.)

Response 403

  1. MIDDLEWARE = [
  2. 'django.middleware.security.SecurityMiddleware',
  3. 'django.contrib.sessions.middleware.SessionMiddleware',
  4. 'django.middleware.common.CommonMiddleware',
  5. # 'django.middleware.csrf.CsrfViewMiddleware',
  6. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  7. 'django.contrib.messages.middleware.MessageMiddleware',
  8. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  9. ]

Response 403
如前一篇文章所述,当用户登录但他们没有足够的特权来访问请求的资源时,可能会导致403错误。 例如,一般用户可能正在尝试加载“管理员”路由。
另一方面,最明显的时间是您根本没有登录或提供了错误的密码时遇到401错误。

Response 500
django服务端 报错
Response 200
表明该请求被成功地完成,所请求的资源发送到客户端。

http协议中各个响应状态返回值的含义

1.该类型状态码表示接收到请求并且继续处理

100:客户端必须继续发出请求。
101:客户端要求服务器根据请求转换HTTP协议版本。
2.该类型状态码表示动作被成功接收、理解和接受。

200,表明该请求被成功地完成,所请求的资源发送到客户端。
201,提示知道新文件的URL。
202,接受并处理,但处理未完成。
203,返回信息不确定或不完整。
204,收到请求,但返回信息为空.
205,服务器完成了请求,用户必须复位当前已经浏览过的文件。
206,服务器已经完成了部分用户的GET请求。
3.该类型状态码表示为了完成指定的动作,必须接受进一步处理。

300,请求的资源可在多处获得。
301,本网页被永久性转移到另一个URL。
302,请求的网页被重定向到新的地址。
303,建议用户访问其他URL或访问方式。
304,自从上次请求后,请求的网页未修改过。
305,请求的资源必须从服务器指定的地址获得。
306,前一版本HTTP中使用的代码,现已不再使用。
307,声明请求的资源临时性删除。
4.该类型状态码表示请求包含错误语法或不能正确执行。

400,客户端请求有语法错误。
401,请求未经授权。
402,保留有效ChargeTo头响应。
403,禁止访问,服务器收到请求,但拒绝提供服务。
404,可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。
405,用户在Request-Line字段定义的方法不被允许。
406,根据用户发送的Accept,请求资源不可访问。
407,类似401,用户必须首先在代理服务器上取得授权。
408,客户端没有在用户指定的时间内完成请求。
409,对当前资源状态,请求不能完成。
410,服务器上不再有此资源。
411,服务器拒绝用户定义的Content-Length属性请求。
412,一个或多个请求头字段在当前请求中错误。
413,请求的资源大于服务器允许的大小。
414,请求的资源URL长于服务器允许的长度。
415,请求资源不支持请求项目格式。
416,请求中包含Range请求头字段,在当前请求资源范围内没有range指示值。
417,服务器不满足请求Expect头字段指定的期望值。
5.该类型状态码表示服务器或网关错误。

500,服务器错误。
501,服务器不支持请求的功能。
502,网关错误。
503,无法获得服务。
504,网关超时。
505,不支持的http版本。
补充:

http请求方法:

用来表明对指定资源的操作方式。常用的请求方法有:

OPTIONS,返回服务器针对特定资源所支持的HTTP请求方法。
HEAD,与GET请求一致,只不过不会返回响应体。
GET,请求指定的资源。
POST,向指定资源提交数据进行处理请求,数据包含在请求体中,可能会导致新资源的创建或已有资源的修改。
PUT,向指定资源位置上传最新内容。
DELETE,请求服务器删除所标识的资源。
GET和POST方法的主要区别:

GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连。POST把提交的数据放在Body中。
GET提交的数据大小最多1024字节。POST提交的数据大小没有限制。
GET提交数据时,会出现在URL上。POST则不会出现在URL上。

参考

https://blog.csdn.net/Amandazhouzhou/article/details/89210459
https://blog.csdn.net/cumian8165/article/details/108098027