httpSend

发送http请求

Per 26-10-2019. Zie de nieuwste versie.

Dit script moet niet direct worden geïnstalleerd - het is een bibliotheek voor andere scripts om op te nemen met de meta-richtlijn // @require https://update.greasyfork.org/scripts/376085/744037/httpSend.js

  1. /*
  2. *使用httpSend()函数调用,需把@require放在// @grant GM_xmlhttpRequest之后
  3. *参数详解:
  4. *url:请求的url,必须!
  5. *type:请求方式(get/post),必须!
  6. *mode:请求调用函数(jq/gm),必须!
  7. *headers:自定义请求头,仅gm模式可用
  8. *data:要发送的数据,仅post方式可用
  9. *timeout:请求超时时间,单位毫秒
  10. *dataType:返回数据类型(arraybuffer,blob,json)
  11. *callback:请求完成回调函数
  12. *username:用户名
  13. *password:密码
  14. */
  15. function httpSend(i,e={}){
  16. if(!i.url){throw "缺少请求的url!"};
  17. if(!i.type){throw "缺少请求方式(get/post)!"};
  18. if(!i.mode){i.mode="jq"};
  19. e.url=i.url;
  20. i.username&&(e.username=i.username);
  21. i.password&&(e.password=i.password);
  22. i.data&&(e.data=i.data);
  23. e.timeout=i.timeout?i.timeout*1000:10000;
  24. i.headers&&(e.headers=i.headers);
  25. if(/^jq$/i.test(i.mode)){
  26. e.xhrFields={withCredentials: true};
  27. e.crossDomain=true;
  28. e.cache=false;
  29. e.type=i.type;
  30. i.callback&&(e.complete=function(e){i.callback(jqTransform(e))});
  31. try{$jQuery.ajax(e)}catch(err){i.callback(err)};
  32. }else if(/^gm$/i.test(i.mode)){
  33. i.type&&(e.method=i.type.toUpperCase());
  34. if(i.callback){
  35. e.onload=function(e){i.callback(gmTransform(e))}
  36. e.ontimeout=function(e){i.callback(gmTransform(e))}
  37. }
  38. try{GM_xmlhttpRequest(e)}catch(err){i.callback(err)};
  39. }else{throw "此请求模式("+i.mode+")不存在!"}
  40. }
  41. function jqTransform(response){
  42. let data={};
  43. data.status=response.status;
  44. data.statusText=response.statusText;
  45. data.readyState=response.readyState;
  46. data.text=response.responseText;
  47. data.json=response.response||toJSON(response.responseText);
  48. data.responseHeaders=response.getAllResponseHeaders();
  49. data.getResponseHeader=response.getResponseHeader;
  50. data.data=response;
  51. return data;
  52. }
  53. function gmTransform(response){
  54. let data={};
  55. data.status=response.status;
  56. data.statusText=response.statusText;
  57. data.readyState=response.readyState;
  58. data.text=response.responseText;
  59. data.json=typeof response.response=="object"?response.response:toJSON(response.responseText);
  60. data.responseHeaders=response.responseHeaders;
  61. data.finalUrl=response.finalUrl;
  62. data.data=response;
  63. return data;
  64. }
  65. function toJSON(str) {
  66. if (typeof str == 'string'&&(/^\{[\w\W]*?\}$/gim.test(str))) {
  67. try {
  68. let json=eval('('+str+')');
  69. return json;
  70. } catch(e) {
  71. return {};
  72. }
  73. }else{
  74. return {};
  75. }
  76. }