Я бы использовал httpwebrequest объект.
в зависимости от размера pdfs и времени отклика серверов, вы можете сделать это асинхронно или синхронно.Это синхронный вариант с использованием метода GetResponse()
.
void DoPDFDownload(string strMyUrl, string strPostData, string saveLocation)
{
//create the request
var wr = (HttpWebRequest)WebRequest.Create(myURL);
wr.Method = "POST";
wr.ContentLength = strPostData.Length;
//Identify content type... strPostData should be url encoded per this next
//declaration
wr.ContentType = "application/x-www-form-urlencoded";
//just for good measure, set cookies if necessary for session management, etc.
wr.CookieContainer = new CookieContainer();
using(var sw = new StreamWriter(wr.GetRequestStream()))
{
sw.Write(strPostData);
}
var resp = wr.GetResponse();
//feeling rather lazy at this point, but if you need further code for writing
//response stream to a file stream, I can provide.
//...
}
Ниже приведен небольшой метод, который можно скопировать / вставить в LINQPad, чтобы получить представление о том, как работают эти классы.
void DoSpeedTestDownloadFromFCC()
{
string strMyUrl = "http://data.fcc.gov/api/speedtest/find?latitude=38.0&longitude=-77.5&format=json";
//create the request
var wr = (HttpWebRequest)WebRequest.Create(strMyUrl);
wr.ContentLength = strPostData.Length;
//Note that I changed the method for the webservice's standard.
//No Content type on GET requests.
wr.Method = "GET";
//just for good measure, set cookies if necessary for session management, etc.
wr.CookieContainer = new CookieContainer();
var resp = wr.GetResponse();
//...
using(StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
//here you would write the file to disk using your preferred method
//in linq pad, this just outputs the text to the console.
sr.ReadToEnd().Dump();
}
}