1 module vksdk.httpclient.RequestsTransportClient; 2 3 import std.datetime; 4 import std.experimental.logger.filelogger; 5 import std.stdio; 6 7 import vksdk.client.ClientResponse; 8 import vksdk.client.TransportClient; 9 import requests; 10 11 class RequestsTransportClient : BaseTransportClient { 12 13 private static RequestsTransportClient instance; 14 15 static TransportClient getInstance() { 16 if (instance is null) { 17 instance = new RequestsTransportClient; 18 } 19 20 return instance; 21 } 22 23 private ClientResponse call(string url, string requestBody, bool isPost) { 24 auto request = Request(); 25 request.addHeaders(["Content-Type" : CONTENT_TYPE, "User-Agent" : USER_AGENT]); 26 request.verbosity = 3; 27 request.timeout = 60.seconds; 28 29 for (int i = 0; i < 3; i++) { 30 try { 31 //supervisor.addRequest(request); 32 33 //long startTime = Clock.currTime(); 34 35 Response response; 36 if (requestBody != null) { 37 response = request.post(url, requestBody); 38 } else { 39 response = request.post(url); 40 } 41 42 //logger.log("%s\t\t%s", url, Clock.currTime() - startTime); 43 44 //supervisor.removeRequest(request); 45 46 return new ClientResponse(response.code, cast(string)response.responseBody, response.responseHeaders); 47 } catch (Exception e) { 48 //logger.warningf("Network troubles:\n%s", e.msg); 49 throw e; 50 } 51 } 52 53 throw new Exception("Something wrong"); 54 } 55 56 private ClientResponse call(string url, MultipartForm form) { 57 auto request = Request(); 58 request.verbosity = 3; 59 request.timeout = 60.seconds; 60 // TODO 61 auto response = request.post(url, form); 62 return new ClientResponse(response.code, cast(string)response.responseBody, response.responseHeaders); 63 } 64 65 override ClientResponse post(string url, string fileName, File file) { 66 MultipartForm form; 67 form.add(formData("file", file, ["filename": fileName, "Content-Type": "text/plain"])); 68 69 return call(url, form); 70 } 71 }