В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Учитывая Ваше обновление, можно сделать это путем изменения.Method в GetWebRequest:
using System;
using System.Net;
static class Program
{
static void Main()
{
using (MyClient client = new MyClient())
{
client.HeadOnly = true;
string uri = "http://www.google.com";
byte[] body = client.DownloadData(uri); // note should be 0-length
string type = client.ResponseHeaders["content-type"];
client.HeadOnly = false;
// check 'tis not binary... we'll use text/, but could
// check for text/html
if (type.StartsWith(@"text/"))
{
string text = client.DownloadString(uri);
Console.WriteLine(text);
}
}
}
}
class MyClient : WebClient
{
public bool HeadOnly { get; set; }
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest req = base.GetWebRequest(address);
if (HeadOnly && req.Method == "GET")
{
req.Method = "HEAD";
}
return req;
}
}
, С другой стороны, можно проверить заголовок при переопределении GetWebRespons (), возможно, выдаче исключения, если это не то, что Вы хотели:
protected override WebResponse GetWebResponse(WebRequest request)
{
WebResponse resp = base.GetWebResponse(request);
string type = resp.Headers["content-type"];
// do something with type
return resp;
}
WebResponse является абстрактным классом, и свойство ContentType определяется в наследующих классах. Например, в объекте HttpWebRequest этот метод перегружается для обеспечения заголовка типа контента. Я не уверен, какой экземпляр WebResponse WebClient использует. Если Вы ТОЛЬКО хотите файлы HTML, Ваше лучшее из использования HttpWebRequest возражают непосредственно.
Вы могли выпустить первый запрос с ГЛАВНЫМ глаголом и проверить заголовок ответа типа контента? [редактирование] похоже, что необходимо будет использовать HttpWebRequest для этого, все же.
Ваш вопрос немного сбивает с толку: если Вы используете экземпляр Сети. Класс WebClient, Сеть. WebResponse не вводит в уравнение (кроме того, что это - действительно абстрактный класс, и Вы использовали бы конкретную реализацию, такую как HttpWebResponse, как указано в другом ответе).
Так или иначе, при использовании WebClient, можно достигнуть того, что Вы хотите путем выполнения чего-то вроде этого:
Dim wc As New Net.WebClient()
Dim LocalFile As String = IO.Path.Combine(Environment.GetEnvironmentVariable("TEMP"), Guid.NewGuid.ToString)
wc.DownloadFile("http://example.com/somefile", LocalFile)
If Not wc.ResponseHeaders("Content-Type") Is Nothing AndAlso wc.ResponseHeaders("Content-Type") <> "text/html" Then
IO.File.Delete(LocalFile)
Else
'//Process the file
End If
Примечание, которое действительно необходимо проверить на существование заголовка Типа контента как сервер, как гарантируют, не возвратит его (хотя большинство современных серверов HTTP будет всегда включать его). Если никакой заголовок Типа контента не присутствует, можно отступить к другому методу обнаружения HTML, например, открыв файл, читая первые 1K символы или так в строку, и видя, содержит ли это подстроку < html>
Также примечание, что это немного расточительно, поскольку Вы будете всегда передавать полный файл до решения, хотите ли Вы его или нет. Работать вокруг этого, переключаясь на Сеть. Классы HttpWebRequest/Response могли бы помочь, но стоит ли дополнительный код того, зависит от Вашего приложения...
Я приношу извинения за не очень ясный. Я записал класс обертки, который расширяет WebClient. В этом классе обертки я добавил контейнер cookie и представил свойство тайм-аута для WebRequest.
я использовал DownloadDataAsync () от этого класса обертки, и я не смог получить тип контента от WebResponse этого класса обертки. Мое основное намерение состоит в том, чтобы прервать ответ и определить если природа текста/HTML. Если это не будет, я прерву этот запрос.
мне удалось получить тип контента после переопределения WebClient. GetWebResponse (WebRequest, IAsyncResult) метод.
следующее является образцом моего класса обертки:
public class MyWebClient : WebClient
{
private CookieContainer _cookieContainer;
private string _userAgent;
private int _timeout;
private WebReponse _response;
public MyWebClient()
{
this._cookieContainer = new CookieContainer();
this.SetTimeout(60 * 1000);
}
public MyWebClient SetTimeout(int timeout)
{
this.Timeout = timeout;
return this;
}
public WebResponse Response
{
get { return this._response; }
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request.GetType() == typeof(HttpWebRequest))
{
((HttpWebRequest)request).CookieContainer = this._cookieContainer;
((HttpWebRequest)request).UserAgent = this._userAgent;
((HttpWebRequest)request).Timeout = this._timeout;
}
this._request = request;
return request;
}
protected override WebResponse GetWebResponse(WebRequest request)
{
this._response = base.GetWebResponse(request);
return this._response;
}
protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result)
{
this._response = base.GetWebResponse(request, result);
return this._response;
}
public MyWebClient ServerCertValidation(bool validate)
{
if (!validate) ServicePointManager.ServerCertificateValidationCallback += delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
return this;
}
}