Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2011, 14:37   #1
rip86oz
Новичок
Джуниор
 
Регистрация: 07.08.2010
Сообщений: 2
По умолчанию Отправка файла на Yandex.narod2 (python)

Предыстория. Есть динамический IP адрес (на компе дома). Надо его(адрес) использовать в Javascript на Yandex.narod2. Решил использовать вариант с Ajax-ом, где айпишник будет считываться из файла. Комп будет периодически заливать свой айпишник. Задача - залить файл.
Пишу на Питоне. Используя питоновский скрипт удалось зарегиться на яндексе, получить куки, распарсив ответ, а вот залить файл - никак, хотя ХТМЛ форма вроде простая. Последний запрос возвращает "200 ОК" (ну и ХТМЛ).

ХТМЛ форма (видимо после выбора файла запускается скрипт, который делает сабмит и видимо ещё что-то, но так скрипт и не нашёл):
Код:
<form id="b-far-upload" action="/filemanager/" method="POST" enctype="multipart/form-data">
<div class="b-upload-file">
<input type="file" id="b-far-upload-file" name="file" value=""/>
</div>
<input type="hidden" name="action" value="upload"/>
<input type="hidden" name="currentDir" value="/"/>
</form>
Питоновский код:
Код:
    #отправка HTTP запроса на вход на яндекс.народ2
    conn = httplib.HTTPConnection("passport.yandex.ru")
    params = urllib.urlencode({'login': "xxxxxxxxxx", 'passwd': "yyyyyyyy"})
    headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/html"}
    conn.request("POST", "/passport?mode=login&retpath=http://хххххххх.narod2.yandex.ru/edit/", params, headers)
    r1 = conn.getresponse()
    print r1.status, r1.reason
    data1 = r1.read()
    #print data1
    conn.close()

    #парсим куки ответа
    cookp = data1.find('Set-Cookie: ')
    cookend = 0;
    cooks = "Cookie: "
    while cookp > 0 :
        cookp += 12
        cookend = data1.find(';',cookp)
        cooks += data1[cookp:cookend] 
        cookp = data1.find('Set-Cookie: ',cookend)
        if cookp > 0 :
            cooks += "; "
    print(str(cooks))

    #шлём файл
    print("\n\n")
    conn = httplib.HTTPConnection("xxxxxxxxxxx.narod2.yandex.ru")
    postbody = '''--bndr777
    Content-Disposition: form-data; name="action"

    upload
    --bndr777
    Content-Disposition: form-data; name="currentDir"

    /
    --bndr777
    Content-Disposition: form-data; name="files"; filename="ipaddr.txt"
    Content-Type: text/plain

    xx.xx.xx.xx
    --bndr777--'''
    
    headers = {"Content-type": "multipart/form-data; boundary=bndr777","Content-Length": str(len(postbody)),"Accept": "text/html","Cookie": cooks,}
    conn.request("POST", "/filemanager/", postbody, headers)
    r1 = conn.getresponse()
    print r1.status, r1.reason
    data1 = r1.read()
    print("\n\n")
    print data1
    conn.close()

Если есть другие варианты - выслушаю. Только не надо говорить про то , чтоб купить статический АйПишник))

Последний раз редактировалось rip86oz; 22.02.2011 в 14:45.
rip86oz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отправка файла synapse Slimshaddy Работа с сетью в Delphi 3 30.07.2013 01:27
Отправка файла. denizkin Работа с сетью в Delphi 1 02.11.2010 01:53
Отправка файла на FTP W.i.d.g.e.t.1 Работа с сетью в Delphi 3 10.07.2010 10:48