mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-03 02:36:50 +13:00
Uploader changes required for Dropbox
This commit is contained in:
parent
4e3a66dcc7
commit
68509503a3
1 changed files with 62 additions and 56 deletions
|
@ -184,8 +184,8 @@ protected bool SendRequest(HttpMethod method, Stream downloadStream, string url,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private HttpWebResponse GetResponse(HttpMethod method, string url, Dictionary<string, string> arguments = null,
|
private HttpWebResponse GetResponse(HttpMethod method, string url, Dictionary<string, string> arguments = null, NameValueCollection headers = null,
|
||||||
NameValueCollection headers = null, CookieCollection cookies = null, Stream dataStream = null)
|
CookieCollection cookies = null, Stream dataStream = null)
|
||||||
{
|
{
|
||||||
IsUploading = true;
|
IsUploading = true;
|
||||||
StopUploadRequested = false;
|
StopUploadRequested = false;
|
||||||
|
@ -228,14 +228,22 @@ private HttpWebResponse GetResponse(HttpMethod method, string url, Dictionary<st
|
||||||
|
|
||||||
protected string SendRequestJSON(string url, string json, NameValueCollection headers = null, CookieCollection cookies = null, HttpMethod method = HttpMethod.POST)
|
protected string SendRequestJSON(string url, string json, NameValueCollection headers = null, CookieCollection cookies = null, HttpMethod method = HttpMethod.POST)
|
||||||
{
|
{
|
||||||
byte[] data = Encoding.UTF8.GetBytes(json);
|
MemoryStream stream = null;
|
||||||
|
|
||||||
using (MemoryStream stream = new MemoryStream())
|
try
|
||||||
{
|
{
|
||||||
stream.Write(data, 0, data.Length);
|
if (!string.IsNullOrEmpty(json))
|
||||||
|
{
|
||||||
|
byte[] data = Encoding.UTF8.GetBytes(json);
|
||||||
|
stream = new MemoryStream(data);
|
||||||
|
}
|
||||||
|
|
||||||
return SendRequestStream(url, stream, "application/json", headers, cookies, method);
|
return SendRequestStream(url, stream, "application/json", headers, cookies, method);
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (stream != null) stream.Dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected string SendRequestURLEncoded(string url, Dictionary<string, string> arguments, NameValueCollection headers = null, CookieCollection cookies = null,
|
protected string SendRequestURLEncoded(string url, Dictionary<string, string> arguments, NameValueCollection headers = null, CookieCollection cookies = null,
|
||||||
|
@ -255,7 +263,7 @@ protected string SendRequestURLEncoded(string url, Dictionary<string, string> ar
|
||||||
protected string SendRequestStream(string url, Stream stream, string contentType, NameValueCollection headers = null,
|
protected string SendRequestStream(string url, Stream stream, string contentType, NameValueCollection headers = null,
|
||||||
CookieCollection cookies = null, HttpMethod method = HttpMethod.POST, ResponseType responseType = ResponseType.Text)
|
CookieCollection cookies = null, HttpMethod method = HttpMethod.POST, ResponseType responseType = ResponseType.Text)
|
||||||
{
|
{
|
||||||
using (HttpWebResponse response = GetResponse(url, stream, null, contentType, headers, cookies, method))
|
using (HttpWebResponse response = GetResponse(url, stream, contentType, headers, cookies, method))
|
||||||
{
|
{
|
||||||
return ResponseToString(response, responseType);
|
return ResponseToString(response, responseType);
|
||||||
}
|
}
|
||||||
|
@ -264,7 +272,7 @@ protected string SendRequestStream(string url, Stream stream, string contentType
|
||||||
protected NameValueCollection SendRequestStreamGetHeaders(string url, Stream stream, string contentType, NameValueCollection headers = null,
|
protected NameValueCollection SendRequestStreamGetHeaders(string url, Stream stream, string contentType, NameValueCollection headers = null,
|
||||||
CookieCollection cookies = null, HttpMethod method = HttpMethod.POST)
|
CookieCollection cookies = null, HttpMethod method = HttpMethod.POST)
|
||||||
{
|
{
|
||||||
using (HttpWebResponse response = GetResponse(url, stream, null, contentType, headers, cookies, method))
|
using (HttpWebResponse response = GetResponse(url, stream, contentType, headers, cookies, method))
|
||||||
{
|
{
|
||||||
if (response != null)
|
if (response != null)
|
||||||
{
|
{
|
||||||
|
@ -275,32 +283,43 @@ protected NameValueCollection SendRequestStreamGetHeaders(string url, Stream str
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private HttpWebResponse SendRequestMultiPart(string url, Dictionary<string, string> arguments, NameValueCollection headers = null,
|
private HttpWebResponse SendRequestMultiPart(string url, Dictionary<string, string> arguments, NameValueCollection headers = null, CookieCollection cookies = null,
|
||||||
CookieCollection cookies = null, HttpMethod method = HttpMethod.POST)
|
HttpMethod method = HttpMethod.POST)
|
||||||
{
|
{
|
||||||
string boundary = CreateBoundary();
|
string boundary = CreateBoundary();
|
||||||
|
string contentType = "multipart/form-data; boundary=" + boundary;
|
||||||
byte[] data = MakeInputContent(boundary, arguments);
|
byte[] data = MakeInputContent(boundary, arguments);
|
||||||
|
|
||||||
using (MemoryStream stream = new MemoryStream())
|
using (MemoryStream stream = new MemoryStream())
|
||||||
{
|
{
|
||||||
stream.Write(data, 0, data.Length);
|
stream.Write(data, 0, data.Length);
|
||||||
return GetResponse(url, stream, boundary, "multipart/form-data", headers, cookies, method);
|
return GetResponse(url, stream, contentType, headers, cookies, method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private HttpWebResponse GetResponse(string url, Stream dataStream, string boundary, string contentType, NameValueCollection headers = null,
|
private HttpWebResponse GetResponse(string url, Stream dataStream, string contentType, NameValueCollection headers = null, CookieCollection cookies = null,
|
||||||
CookieCollection cookies = null, HttpMethod method = HttpMethod.POST)
|
HttpMethod method = HttpMethod.POST)
|
||||||
{
|
{
|
||||||
IsUploading = true;
|
IsUploading = true;
|
||||||
StopUploadRequested = false;
|
StopUploadRequested = false;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
HttpWebRequest request = PrepareDataWebRequest(url, boundary, dataStream.Length, contentType, cookies, headers, method);
|
long length = 0;
|
||||||
|
|
||||||
using (Stream requestStream = request.GetRequestStream())
|
if (dataStream != null)
|
||||||
{
|
{
|
||||||
if (!TransferData(dataStream, requestStream)) return null;
|
length = dataStream.Length;
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpWebRequest request = PrepareWebRequest(method, url, headers, cookies, contentType, length);
|
||||||
|
|
||||||
|
if (length > 0)
|
||||||
|
{
|
||||||
|
using (Stream requestStream = request.GetRequestStream())
|
||||||
|
{
|
||||||
|
if (!TransferData(dataStream, requestStream)) return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (HttpWebResponse)request.GetResponse();
|
return (HttpWebResponse)request.GetResponse();
|
||||||
|
@ -324,7 +343,7 @@ private HttpWebResponse GetResponse(string url, Stream dataStream, string bounda
|
||||||
|
|
||||||
protected UploadResult UploadData(Stream dataStream, string url, string fileName, string fileFormName = "file", Dictionary<string, string> arguments = null,
|
protected UploadResult UploadData(Stream dataStream, string url, string fileName, string fileFormName = "file", Dictionary<string, string> arguments = null,
|
||||||
NameValueCollection headers = null, CookieCollection cookies = null, ResponseType responseType = ResponseType.Text, HttpMethod method = HttpMethod.POST,
|
NameValueCollection headers = null, CookieCollection cookies = null, ResponseType responseType = ResponseType.Text, HttpMethod method = HttpMethod.POST,
|
||||||
string requestContentType = "multipart/form-data", string metadata = null)
|
string contentType = "multipart/form-data", string metadata = null)
|
||||||
{
|
{
|
||||||
UploadResult result = new UploadResult();
|
UploadResult result = new UploadResult();
|
||||||
|
|
||||||
|
@ -334,6 +353,7 @@ protected UploadResult UploadData(Stream dataStream, string url, string fileName
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string boundary = CreateBoundary();
|
string boundary = CreateBoundary();
|
||||||
|
contentType += "; boundary=" + boundary;
|
||||||
|
|
||||||
byte[] bytesArguments = MakeInputContent(boundary, arguments, false);
|
byte[] bytesArguments = MakeInputContent(boundary, arguments, false);
|
||||||
byte[] bytesDataOpen;
|
byte[] bytesDataOpen;
|
||||||
|
@ -352,7 +372,7 @@ protected UploadResult UploadData(Stream dataStream, string url, string fileName
|
||||||
byte[] bytesDataClose = MakeFileInputContentClose(boundary);
|
byte[] bytesDataClose = MakeFileInputContentClose(boundary);
|
||||||
|
|
||||||
long contentLength = bytesArguments.Length + bytesDataOpen.Length + bytesDataDatafile.Length + dataStream.Length + bytesDataClose.Length;
|
long contentLength = bytesArguments.Length + bytesDataOpen.Length + bytesDataDatafile.Length + dataStream.Length + bytesDataClose.Length;
|
||||||
HttpWebRequest request = PrepareDataWebRequest(url, boundary, contentLength, requestContentType, cookies, headers, method);
|
HttpWebRequest request = PrepareWebRequest(method, url, headers, cookies, contentType, contentLength);
|
||||||
|
|
||||||
using (Stream requestStream = request.GetRequestStream())
|
using (Stream requestStream = request.GetRequestStream())
|
||||||
{
|
{
|
||||||
|
@ -394,56 +414,42 @@ protected UploadResult UploadData(Stream dataStream, string url, string fileName
|
||||||
|
|
||||||
#region Helper methods
|
#region Helper methods
|
||||||
|
|
||||||
private HttpWebRequest PrepareDataWebRequest(string url, string boundary, long length, string contentType, CookieCollection cookies = null,
|
private HttpWebRequest PrepareWebRequest(HttpMethod method, string url, NameValueCollection headers = null, CookieCollection cookies = null, string contentType = null, long contentLength = 0)
|
||||||
NameValueCollection headers = null, HttpMethod method = HttpMethod.POST)
|
|
||||||
{
|
{
|
||||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
||||||
|
|
||||||
if (headers != null && headers["Accept"] != null)
|
request.Method = method.ToString();
|
||||||
|
|
||||||
|
if (headers != null)
|
||||||
{
|
{
|
||||||
request.Accept = headers["Accept"];
|
if (headers["Accept"] != null)
|
||||||
headers.Remove("Accept");
|
{
|
||||||
|
request.Accept = headers["Accept"];
|
||||||
|
headers.Remove("Accept");
|
||||||
|
}
|
||||||
|
|
||||||
|
request.Headers.Add(headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
request.AllowWriteStreamBuffering = HelpersOptions.CurrentProxy.IsValidProxy();
|
|
||||||
request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
|
|
||||||
request.ContentLength = length;
|
|
||||||
if (!string.IsNullOrEmpty(boundary)) contentType += "; boundary=" + boundary;
|
|
||||||
request.ContentType = contentType;
|
|
||||||
request.CookieContainer = new CookieContainer();
|
request.CookieContainer = new CookieContainer();
|
||||||
if (cookies != null) request.CookieContainer.Add(cookies);
|
if (cookies != null) request.CookieContainer.Add(cookies);
|
||||||
if (headers != null) request.Headers.Add(headers);
|
|
||||||
request.KeepAlive = true;
|
|
||||||
request.Method = method.ToString();
|
|
||||||
request.Pipelined = false;
|
|
||||||
request.ProtocolVersion = HttpVersion.Version11;
|
|
||||||
request.Proxy = HelpersOptions.CurrentProxy.GetWebProxy();
|
|
||||||
request.Timeout = -1;
|
|
||||||
request.UserAgent = UserAgent;
|
|
||||||
|
|
||||||
currentRequest = request;
|
|
||||||
|
|
||||||
return request;
|
|
||||||
}
|
|
||||||
|
|
||||||
private HttpWebRequest PrepareWebRequest(HttpMethod method, string url, NameValueCollection headers = null, CookieCollection cookies = null)
|
|
||||||
{
|
|
||||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
|
||||||
|
|
||||||
if (headers != null && headers["Accept"] != null)
|
|
||||||
{
|
|
||||||
request.Accept = headers["Accept"];
|
|
||||||
headers.Remove("Accept");
|
|
||||||
}
|
|
||||||
|
|
||||||
request.Method = method.ToString();
|
|
||||||
if (headers != null) request.Headers.Add(headers);
|
|
||||||
request.CookieContainer = new CookieContainer();
|
|
||||||
if (cookies != null) request.CookieContainer.Add(cookies);
|
|
||||||
request.KeepAlive = false;
|
|
||||||
IWebProxy proxy = HelpersOptions.CurrentProxy.GetWebProxy();
|
IWebProxy proxy = HelpersOptions.CurrentProxy.GetWebProxy();
|
||||||
if (proxy != null) request.Proxy = proxy;
|
if (proxy != null) request.Proxy = proxy;
|
||||||
request.UserAgent = UserAgent;
|
request.UserAgent = UserAgent;
|
||||||
|
request.ContentType = contentType;
|
||||||
|
|
||||||
|
if (contentLength > 0)
|
||||||
|
{
|
||||||
|
request.AllowWriteStreamBuffering = HelpersOptions.CurrentProxy.IsValidProxy();
|
||||||
|
request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
|
||||||
|
request.ContentLength = contentLength;
|
||||||
|
request.Pipelined = false;
|
||||||
|
request.Timeout = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
request.KeepAlive = false;
|
||||||
|
}
|
||||||
|
|
||||||
currentRequest = request;
|
currentRequest = request;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue