إضافة رأس في طلب HTTP في جافا
-
19-09-2019 - |
سؤال
أنا أستخدم هذا التعليمات البرمجية التالية لإرسال طلب 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.