ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
levi0x0xלא בפורום כעת ת.הצטרפות: 01/05/2013 · הודעות: 91 · מיקום: /
 

הודעה פורסם: 26/02/2015 - 17:21
נושא ההודעה: הפרדת Headers מתוכן C SOCKETS

שלום לכולם!

כתבתי תוכנית מסוימת שמקבלת מידע מ HTTP ב - C. ומורידה את הקובץ
(מעיין מנהל הורדות קטן )

הבעיה היא שאני מקבל את המידע אבל בייחד עם HEADERS של השרת שנראה כך:
קוד:

HTTP/1.1 200 OK
Server: Blha 3.8
Date: Thu, 26 Feb 2015 14:11:32 GMT
Content-Type: text/vnd. charset=utf-8
Content-Length: 1363
Connection: close
Cache-Control: no-cache, max-age=0
Pragma: no-cache
Expires: Mon, 26 Jul 1997 05:00:00 GMT


 <html>
BLHA  BLHA



ניסיתי לנצל את השורה \r\n\r\n בכדי שזה יעבוד אבל עדיין נשאר טיפה רווח והתוכן (בינארי) מתקבל הרוס

מי מחברי הפורום מכיר שיטה יותר אלגנטית להפריד את התוכן והכותרים?

תודה רבה ויום טוב!
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 26/02/2015 - 20:22
נושא ההודעה:

זה \r\n\r\n (כפול) בנוסף תבדוק את הערכים הבינארים שקיבלת.
יכול להיות שיש לך שם BOM
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
שחרלא בפורום כעת ת.הצטרפות: 07/04/2003 · הודעות: 250 ·
 

הודעה פורסם: 01/03/2015 - 08:04
נושא ההודעה: יש מסמך שמסביר בדיוק איך לעשות את זה

https://www.ietf.org/rfc/rfc2616.txt

הוא גם מסביר איך לפרש את התוכן ככה שתמיד תקבל את התוצאה הנכונה.

אם מסובך לך מידי לממש את כל הפרוטוקול, למה שלא תנסה ספריה שעושה את זה בשבילך?

למשל: http://curl.haxx.se/libcurl/c/

(אם אתה עובד ב- C++, יש את http://curl.haxx.se/libcurl/cplusplus/)

לאור כמה שהבעיה ידועה ונפוצה, אין סיבה לנסות לפתור אותה לבד. אם אתה כם מחליט לפתור אותה לבד, למשל בגלל שאתה רוצה ללמוד, אני הייתי ממש כבר את כל הפרוטוקול, כך שאם האתר יחליט לשנות משהו, זה עדיין יעבוד.

שחר

_________________
שחר שמש
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
levi0x0xלא בפורום כעת ת.הצטרפות: 01/05/2013 · הודעות: 91 · מיקום: /
 

הודעה פורסם: 01/03/2015 - 12:42
נושא ההודעה: Re: יש מסמך שמסביר בדיוק איך לעשות את זה

שחר :
https://www.ietf.org/rfc/rfc2616.txt

הוא גם מסביר איך לפרש את התוכן ככה שתמיד תקבל את התוצאה הנכונה.

אם מסובך לך מידי לממש את כל הפרוטוקול, למה שלא תנסה ספריה שעושה את זה בשבילך?

למשל: http://curl.haxx.se/libcurl/c/

(אם אתה עובד ב- C++, יש את http://curl.haxx.se/libcurl/cplusplus/)

לאור כמה שהבעיה ידועה ונפוצה, אין סיבה לנסות לפתור אותה לבד. אם אתה כם מחליט לפתור אותה לבד, למשל בגלל שאתה רוצה ללמוד, אני הייתי ממש כבר את כל הפרוטוקול, כך שאם האתר יחליט לשנות משהו, זה עדיין יעבוד.

שחר


הקוד עצמו נכתב ב - C את LIBCURL אני מכיר היטב
אבל כל המטרה היא שהתכנית לא תהיה תלויה באף ספריה

המימוש שלי פשוט פותח SOCKET שולח בקשת HTTP מפונקציה שיוצרת אותה
ומקבל את התוכן

קראתי קצת את הקוד של AXEL במיוחד את http.c שעזר לי להבין קצת איך זה עובד

עכשיו יש לי רעיון תיאורטית אני לא יודע כמה הוא יעבוד:

לקרוא את Content-Length ואז לדעת מה הגודל של הקובץ ומשם להמשיך.

אני ינסה לממש אותו תודה על המסמך של ה - RFC אני יתעמק בו עכשיו
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
שחרלא בפורום כעת ת.הצטרפות: 07/04/2003 · הודעות: 250 ·
 

הודעה פורסם: 01/03/2015 - 17:26
נושא ההודעה:

קח בחשבון שלא בטוח שיש לך Content-Length.

יכול להיות שזו בקשה יחידה בחיבור, והוא פשוט יסגור את החיבור כשהוא יחליט שהוא סיים

יכול להיות (בד"כ בגלל שזה תוכן שיוצר דינמית) שתקבל אותו ב-Chunked encoding.

אלא אם אתה שולט גם על השרת וגם על הלקוח, אני ממליץ לך לממש את מה שה-RFC אומר (או להשתמש בספריה).

שחר

_________________
שחר שמש
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 01/03/2015 - 18:55
נושא ההודעה:

לא ברור זה למטרת לימוד? שעורי בית?

בכל מקרה אתה יכול לחפש מחט בערמת שחת ולחפש \r\n מהמקום האחרון שמצאת +2.



קוד:

#include <string.h>

       char *strstr(const char *haystack, const char *needle);
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
levi0x0xלא בפורום כעת ת.הצטרפות: 01/05/2013 · הודעות: 91 · מיקום: /
 

הודעה פורסם: 02/03/2015 - 20:26
נושא ההודעה:

המטרה היא לימוד כמובן לנסות לכתוב משהו כמו Wget

את strstr היה הפתרון הראשון שלי אבל עדיין הפונקצייה משאירה רווח מסוים
שלדוגמא שאני מקבל תוכן של קובץ .png

הקובץ מתקבל פגום בגלל שבתחילת הקובץ יש שורה בלתי נראית שנשארה מ - strstr
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 03/03/2015 - 09:27
נושא ההודעה:

בסוף יש פעמייים \r\n\r\n תחפש את זה ותוסיף +4 לפוינטר משם מתחיל ה- data.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. levi0x0x
  2. אורח
  3. שחר
  4. levi0x0x
  5. שחר
  6. אורח
  7. levi0x0x
  8. אורח