עזרה עם http put בג'אווה

Oferעפר

New member
עזרה עם http put בג'אווה

אני מנסע להעלות קובץ ics לגוגל קלנדר . למרות שה URL נכון (אני מוריד ממנו את קובץ ה ics ללא בעייה)
השרת מגיב בשגיאת 404 לנסיון להעלות חזרה את הקובץ ב HTTP PUT :

try {
urlC = (HttpURLConnection) url.openConnection ();
urlC.setDoInput ( true ); // so we can get response code
urlC.setDoOutput ( true );
urlC.setUseCaches ( false );
urlC.setDefaultUseCaches ( false );
urlC.setAllowUserInteraction ( true );
urlC.setRequestMethod ( "PUT" );
urlC.setRequestProperty ( "Content-type", "text/calendar" );
urlC.setRequestProperty ( "Content-Length", "" + inputFile.length () );

// InputStream is = urlC.getInputStream ();
OutputStream os = urlC.getOutputStream ();
FileInputStream fis = new FileInputStream ( inputFile );
DataInputStream dis = new DataInputStream (
new BufferedInputStream ( fis ) );
DataOutputStream dos = new DataOutputStream ( new BufferedOutputStream os ) );
byte[] buf = new byte[4 * 1024]; // 4K buffer
int bytesRead;
while ( ( bytesRead = dis.read ( buf ) ) != -1 ) {
dos.write ( buf, 0, bytesRead );
totalRead += bytesRead;
}
dos.flush ();


dos.close ();
urlC.disconnect ();
}catch


האם יש למישהו ניסיון ם זה ? אשמח לעזרה. חריש עמוק בגוגל לא העלה בינתיים דבר.
 

eladts

New member
למה אתה מצפה שזה יעבוד?

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

Oferעפר

New member
אני לא מניח. אתה כן

ה authentication עובד ללא בעיות ומשמש אותי גם לדברים אחרים. הודעת השגיאה מתקבלת אחרי authentication מוצלח.
לגבי ה API, אני חושש שאתה שוב מניח ומטעה. בכל מה שקראתי ובדקתי ה API לא תומך בהעברת קובץ כזו. אם אתה יודע (לא משער) אחרת, אשמח אם תתקן אותי (בעובדות).
גם לא מצאתי דוגמת POST שעובד.
 

selalerer

New member
אחרי קצת קריאה, לא ראיתי שגוגל תומכים בפעולה

כזו.

שרת HTTP לא תומך בפעולת PUT מהקופסא. הפעולה קיימת, אבל היא לא פשוט מעלה את הקובץ שאתה רוצה לאן שאתה רוצה.

כשאתה כותב בעצמך את הקוד בשרת אז אתה צריך לממש את זה.

אולי בכדי לעלות קובץ גם זה חייב להיות POST ו-content-encoding מסויים וגם transfer-encoding מסויים. אני לא בטוח בקשר לזה וכבר לא זוכר את כל הפרטים.

מה שאני אומר הוא שגוגל צריכים בצורה מפורשת ומכוונת לממש את הממשק שאתה מנסה להשתמש בו בכדי שיעבוד כמו שאתה מצפה. זאת אומנם הסמנטיקה של HTTP PUT אבל לא מצאתי שום מקום שאומר ש-google אכן שמו בצד שרת שלהם מימוש שעושה את מה שאתה מצפה.
 

Oferעפר

New member
תודה selalerer

- אני יודע בוודאות שהקוד המצורף עבד לפני כמה שנים. יתכן שדברים השתנו.
- קראתי כי יש אפשרות להעלות קובץ ics ( קבצי ical ) , מה שחוסך את הצורך לסנכרן כל פגישה בנפרד.
על המאמץ . אמשיך לחפור.
 

selalerer

New member
אתה יכול להסתכל ב-headers של התגובה מה סוג...

...השרת שהם משתמשים?
 

eladts

New member
גוגל משתמשים בשרתים יעודיים שלהם

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