public DfopResult dfop(string fop,byte[] data) { DfopResult dfopResult = new DfopResult(); HttpFormFile dfopData = HttpFormFile.NewFileFromBytes("netFx.png", "application/octet-stream", data); string dfopUrl = string.Format("{0}/dfop?fop={1}", API_HOST, fop); string token = Auth.createManageToken(dfopUrl, null, mac); Dictionary<string, string> dfopHeaders = new Dictionary<string, string>(); dfopHeaders.Add("Authorization", token); RecvDataHandler dfopRecvDataHandler = new RecvDataHandler(delegate (ResponseInfo respInfo, byte[] respData) { dfopResult.ResponseInfo = respInfo; dfopResult.ResponseData = respData; }); mHttpManager.postMultipartDataRaw(dfopUrl, dfopHeaders, dfopData, null, dfopRecvDataHandler); return dfopResult; }
public DfopResult dfop(string fop,string url) { DfopResult dfopResult = new DfopResult(); string encodedUrl = StringUtils.urlencode(url); string dfopUrl = string.Format("{0}/dfop?fop={1}&url={2}", API_HOST, fop, encodedUrl); string token = Auth.createManageToken(dfopUrl, null, mac); Dictionary<string, string> dfopHeaders = new Dictionary<string, string>(); dfopHeaders.Add("Authorization", token); RecvDataHandler dfopRecvDataHandler = new RecvDataHandler(delegate (ResponseInfo respInfo, byte[] respData) { dfopResult.ResponseInfo = respInfo; dfopResult.ResponseData = respData; }); mHttpManager.postFormRaw(dfopUrl, dfopHeaders, dfopRecvDataHandler); return dfopResult; }
/// <summary> /// post multi-part data form to remote server /// used to upload file /// </summary> /// <param name="pUrl"></param> /// <param name="pHeaders"></param> /// <param name="pPostParams"></param> /// <param name="httpFormFile"></param> /// <param name="pProgressHandler"></param> /// <param name="pCompletionHandler"></param> public void postMultipartDataRaw(string pUrl, Dictionary<string, string> pHeaders, HttpFormFile pFormFile, ProgressHandler pProgressHandler, RecvDataHandler pRecvDataHandler) { if (pFormFile == null) { if (pRecvDataHandler != null) { pRecvDataHandler(ResponseInfo.fileError(new Exception("no file specified")), null); } return; } HttpWebRequest vWebReq = null; HttpWebResponse vWebResp = null; try { vWebReq = (HttpWebRequest)WebRequest.Create(pUrl); vWebReq.ServicePoint.Expect100Continue = false; } catch (Exception ex) { if (pRecvDataHandler != null) { pRecvDataHandler(ResponseInfo.invalidRequest(ex.Message), null); } return; } try { vWebReq.UserAgent = this.getUserAgent(); vWebReq.AllowAutoRedirect = false; vWebReq.Method = "POST"; //create boundary string formBoundaryStr = this.createFormDataBoundary(); string contentType = string.Format("multipart/form-data; boundary={0}", formBoundaryStr); vWebReq.ContentType = contentType; if (pHeaders != null) { foreach (KeyValuePair<string, string> kvp in pHeaders) { if (!kvp.Key.Equals("Content-Type")) { vWebReq.Headers.Add(kvp.Key, kvp.Value); } } } //write post body vWebReq.AllowWriteStreamBuffering = true; byte[] formBoundaryBytes = Encoding.UTF8.GetBytes(string.Format("{0}{1}\r\n", FORM_BOUNDARY_TAG, formBoundaryStr)); byte[] formBoundaryEndBytes = Encoding.UTF8.GetBytes(string.Format("\r\n{0}{1}{2}\r\n", FORM_BOUNDARY_TAG, formBoundaryStr, FORM_BOUNDARY_TAG)); using (Stream vWebReqStream = vWebReq.GetRequestStream()) { vWebReqStream.Write(formBoundaryBytes, 0, formBoundaryBytes.Length); //write file name string filename = pFormFile.Filename; if (string.IsNullOrEmpty(filename)) { filename = this.createRandomFilename(); } byte[] filePartTitleData = Encoding.UTF8.GetBytes( string.Format("Content-Disposition: form-data; name=\"data\"; filename=\"{0}\"\r\n", filename)); vWebReqStream.Write(filePartTitleData, 0, filePartTitleData.Length); //write content type string mimeType = FORM_MIME_OCTECT; //!!!注意这里 @fengyh 2016-08-17 15:00 if (!string.IsNullOrEmpty(pFormFile.ContentType)) { mimeType = pFormFile.ContentType; } byte[] filePartMimeData = Encoding.UTF8.GetBytes(string.Format("Content-Type: {0}\r\n\r\n", mimeType)); vWebReqStream.Write(filePartMimeData, 0, filePartMimeData.Length); //write file data switch (pFormFile.BodyType) { case HttpFileType.FILE_PATH: try { FileStream fs = File.Open(pFormFile.BodyFile, FileMode.Open, FileAccess.Read); this.writeHttpRequestBody(fs, vWebReqStream); } catch (Exception fex) { if (pRecvDataHandler != null) { pRecvDataHandler(ResponseInfo.fileError(fex), null); } } break; case HttpFileType.FILE_STREAM: this.writeHttpRequestBody(pFormFile.BodyStream, vWebReqStream); break; case HttpFileType.DATA_BYTES: vWebReqStream.Write(pFormFile.BodyBytes, 0, pFormFile.BodyBytes.Length); break; case HttpFileType.DATA_SLICE: vWebReqStream.Write(pFormFile.BodyBytes, pFormFile.Offset, pFormFile.Count); break; } vWebReqStream.Write(formBoundaryEndBytes, 0, formBoundaryEndBytes.Length); vWebReqStream.Flush(); } //fire request vWebResp = (HttpWebResponse)vWebReq.GetResponse(); handleWebResponse(vWebResp, pRecvDataHandler); } catch (Exception exp) { if(pRecvDataHandler!=null) { pRecvDataHandler(ResponseInfo.networkError(exp.Message), null); } } finally { if (vWebResp != null) { vWebResp.Close(); vWebResp = null; } if (vWebReq != null) { vWebReq.Abort(); vWebReq = null; } } }
/// <summary> /// post data from raw /// </summary> /// <param name="pUrl"></param> /// <param name="pHeaders"></param> /// <param name="pRecvDataHandler"></param> public void postFormRaw(string pUrl, Dictionary<string, string> pHeaders, RecvDataHandler pRecvDataHandler) { HttpWebRequest vWebReq = null; HttpWebResponse vWebResp = null; try { vWebReq = (HttpWebRequest)WebRequest.Create(pUrl); } catch (Exception ex) { if (pRecvDataHandler != null) { pRecvDataHandler(ResponseInfo.invalidRequest(ex.Message), null); } return; } try { vWebReq.UserAgent = this.getUserAgent(); vWebReq.AllowAutoRedirect = false; vWebReq.Method = "POST"; vWebReq.ContentType = FORM_MIME_URLENCODED; if (pHeaders != null) { foreach (KeyValuePair<string, string> kvp in pHeaders) { if (!kvp.Key.Equals("Content-Type")) { vWebReq.Headers.Add(kvp.Key, kvp.Value); } } } //fire request vWebResp = (HttpWebResponse)vWebReq.GetResponse(); handleWebResponse(vWebResp, pRecvDataHandler); } catch (Exception exp) { if (pRecvDataHandler != null) { pRecvDataHandler(ResponseInfo.networkError(exp.Message), null); } } finally { if (vWebResp != null) { vWebResp.Close(); vWebResp = null; } if (vWebReq != null) { vWebReq.Abort(); vWebReq = null; } } }
private void handleWebResponse(HttpWebResponse pWebResp, RecvDataHandler pRecvDataHandler) { DateTime startTime = DateTime.Now; //check for exception int statusCode = ResponseInfo.NetworkError; string reqId = null; string xlog = null; string ip = null; string xvia = null; string error = null; string host = null; byte[] respData = null; int contentLength = -1; if (pWebResp != null) { statusCode = (int)pWebResp.StatusCode; if (pWebResp.Headers != null) { WebHeaderCollection respHeaders = pWebResp.Headers; foreach (string headerName in respHeaders.AllKeys) { if (headerName.Equals("X-Reqid")) { reqId = respHeaders[headerName].ToString(); } else if (headerName.Equals("X-Log")) { xlog = respHeaders[headerName].ToString(); } else if (headerName.Equals("X-Via")) { xvia = respHeaders[headerName].ToString(); } else if (headerName.Equals("X-Px")) { xvia = respHeaders[headerName].ToString(); } else if (headerName.Equals("Fw-Via")) { xvia = respHeaders[headerName].ToString(); } else if (headerName.Equals("Host")) { host = respHeaders[headerName].ToString(); } else if (headerName.Equals("Content-Length")) { contentLength = int.Parse(respHeaders["Content-Length"]); } } } if (contentLength > 0) { Stream ps = pWebResp.GetResponseStream(); respData = new byte[contentLength]; int bytesRead = 0; // 已读取的字节数 int bytesLeft = contentLength; // 剩余字节数 while (bytesLeft > 0) { bytesRead = ps.Read(respData, contentLength - bytesLeft, bytesLeft); bytesLeft -= bytesRead; } try { ///////////////////////////////////////////////////////////// // 改进Response的error解析, 根据HttpStatusCode // @fengyh 2016-08-17 18:29 ///////////////////////////////////////////////////////////// if (statusCode != (int)HCODE.OK) { bool isOtherCode = HttpCode.GetErrorMessage(statusCode, out error); if (isOtherCode) { string respJson = Encoding.UTF8.GetString(respData); Dictionary<string, string> errorDict = JsonConvert.DeserializeObject<Dictionary<string, string>>(respJson); error = errorDict["error"]; } } } catch (Exception) { } } else { error = "response error"; } } double duration = DateTime.Now.Subtract(startTime).TotalSeconds; ResponseInfo respInfo = new ResponseInfo(statusCode, reqId, xlog, xvia, host, ip, duration, error); if (pRecvDataHandler != null) { pRecvDataHandler(respInfo, respData); } }
public void getRaw(string pUrl,RecvDataHandler pRecvDataHandler) { HttpWebRequest vWebReq = null; HttpWebResponse vWebResp = null; try { vWebReq = (HttpWebRequest)WebRequest.Create(pUrl); } catch (Exception ex) { if (pRecvDataHandler != null) { pRecvDataHandler(ResponseInfo.invalidRequest(ex.Message), null); } return; } try { vWebReq.AllowAutoRedirect = false; vWebReq.Method = "GET"; vWebReq.UserAgent = this.getUserAgent(); //fire request vWebResp = (HttpWebResponse)vWebReq.GetResponse(); handleWebResponse(vWebResp, pRecvDataHandler); } catch (Exception exp) { if (pRecvDataHandler != null) { pRecvDataHandler(ResponseInfo.networkError(exp.Message), null); } } finally { if (vWebResp != null) { vWebResp.Close(); vWebResp = null; } if (vWebReq != null) { vWebReq.Abort(); vWebReq = null; } } }