سؤال

أنا أستخدم هذا التعليمات البرمجية التالية لإرسال طلب HTTP بسيط:

try
{
    Socket  s = new Socket ();
    s.bind    (new InetSocketAddress (ipFrom, 0));
    s.connect (new InetSocketAddress (ipTo,   80), 1000);

    PrintWriter     writer = new PrintWriter    (s.getOutputStream ());
    BufferedReader  reader = new BufferedReader (new InputStreamReader (s.getInputStream ()));

    writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 
    writer.flush ();

    s     .close ();
    reader.close ();
    writer.close ();
}

ومع ذلك، كما ترون، لا أرسل رأس مخصص. ماذا يجب أن أضيف لإرسال رأس مخصص؟

هتافات،

كريستوف أوليفييه

هل كانت مفيدة؟

المحلول

عندما تكتب

writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 

ال \r\n\r\n يترسل BIT إلى عودة موجز / نقل خطي لإنهاء الخط ثم أحدهما آخر للإشارة إلى أنه لا يوجد المزيد من الرؤوس. هذا هو المعيار في كل من تنسيقات HTTP والبريد الإلكتروني، أي أن سطر فارغ يشير إلى نهاية الرؤوس. من أجل إضافة رؤوس إضافية تحتاج فقط إلى عدم إرسال التسلسل هذا حتى تنتهي. يمكنك القيام بما يلي بدلا من ذلك

writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
writer.print ("header1: value1\r\n"); 
writer.print ("header2: value2\r\n"); 
writer.print ("header3: value3\r\n"); 
// end the header section
writer.print ("\r\n"); 

نصائح أخرى

لا تحاول تنفيذ بروتوكول HTTP بنفسك.

يستخدم httpcomponents. بواسطة أباتشي.

(أو كبار السن وأسهل قليلا لاستخدام الإصدار - httpclient.)

حتى لو اقترحت تجربة HttpCommonents كما ذكرها Bozho بدلا من تنفيذ HTTP من قبل نفسك، فهذه هي الطريقة لإضافة رأس مخصص:

 writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
 writer.print ("X-MyOwnHeader: SomeValue\r\n");

يجب عليك استخدام الفصول الموجودة بالفعل لاستخدامها لاتصالات HTTP، مثل HTTPUrlConnection هذا هو طفل UrlConnection ولديه هذه الطريقة

void setRequestProperty(String key, String value)

يجب استخدامها لتعيين معلمات الطلب (مثل رأس حقل) .. تحقق هنا كمرجع

يمكنك أيضا رؤية URLConnection.

http://java.sun.com/j2se/1.4.2/docs/api/java/net/urlconnection.html

إذا اضطررت تماما إلى القيام بذلك بنفسك، فيجب اتباع هذا التنسيق مع كل رأس على خطها الخاص.

الاسم: القيمة

ابحث في تنسيق الرأس في مواصفات HTTP.

http://www.w3.org/protocols/http/1.0/draft-ietf-http-spec.html#message-headers.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top