Kami akan mendapat respons 403

0

Saya menggunakan API yang memiliki batas permintaan dalam satu jam. Tetapi skrip saya melakukan semuanya sekaligus sehingga saya kehilangan sekitar 1/3 permintaan karena saya mendapatkan 403.

Apakah ada cara untuk memeriksa respons wget dan jika saya mendapatkan 403 untuk menunggu 5 menit dan coba lagi?

Dan ini kode pengujian saya (untuk saat ini):

system ("wget \"http://test-link.com/403/\" -O  {$dir}/{$in_dir_counter}.xml");
$test = system ("wget \"http://test-link.com/403/\" -O  {$dir}/{$in_dir_counter}.xml");

echo "responsed - ".$test;      

keduanya kembali sama.

pengguna270181
sumber
Apa yang disarankan penelitian Anda sendiri?
Dave
Penelitian saya? Semua forum yang saya baca menyarankan untuk menambahkan batas waktu untuk SETIAP permintaan. Tetapi saya tidak dapat melakukannya karena dengan kondisi seperti itu (403) perlu 1-2 hari untuk menyelesaikannya. Jadi, jika saya menambahkan 10sec timeout, setidaknya 4-5 hari dalam harapan terbaik.
user270181
Akan sangat membantu jika Anda memposting skrip atau bagian yang relevan
Tog
Baru saja menambahkan bagian dari kode. Semoga ini bisa membantu.
user270181

Jawaban:

0

Bagaimana kalau menggunakan skrip sederhana untuk itu:

  • Jalankan skrip setiap 5 menit sekali kecuali sudah berjalan.
  • Periksa usia file lokal. Jika lebih lama dari ambang tertentu, unduh lagi.

Jadi jika semuanya berjalan lancar, tidak ada yang terjadi, kecuali file sudah usang. Jika file kedaluwarsa dan gagal diunduh, Anda dapat mencoba kembali Iterasi berikutnya.

Saya tidak yakin mengapa Anda menandai ini php, tetapi jika Anda benar-benar menjalankan skrip php pendekatan ini agak mudah dilakukan (mengingat Anda telah mengaktifkan soket web):

foreach($files as $file)
    if (@filemdate($local_path + $file) + $cache_duration < time())
        @copy($remote_path + $file, local_path + $file);

Perhatikan bahwa $remote_pathmemang bisa berupa HTTP atau URL FTP. Tidak perlu memanggil wget. Ini @akan mencegah pesan kesalahan dicetak.

Untuk membuktikan bahwa ini tidak akan menyebabkan menunggu yang tidak dibutuhkan:

  • Anggap Anda memiliki 1000 file untuk diunduh, tetapi Anda hanya dapat mengunduh hingga 250 file per jam.
  • Setel cache_durationuntuk menghemat waktu di mana Anda akan mendapatkan semua file, seperti 24 jam ( 24 * 60 * 60).
  • Jalankan kembali script di atas sekali setiap jam.
  • Iterasi pertama, 250 file pertama akan diperbarui. Yang lain akan gagal.
  • Iterasi kedua, 250 file pertama akan dilewati (karena cukup baru) dan 250 file berikutnya akan diunduh.
  • Setelah iterasi keempat Anda akan memperbarui / mengunduh semua 1000 file.
  • Tentu saja Anda dapat mengatur intervall yang lebih pendek, seperti 5 menit, tetapi ini akan membuat lebih banyak permintaan / lalu lintas (tergantung pada apakah ini dapat diterima).

Gagasan skrip alternatif:

  • Coba unduh file.
  • Jika gagal, Anda harus dapat menentukan bahwa berdasarkan nilai pengembalian / kode keluar wget. Jadi dalam hal ini tunggu 5 menit, lalu ulangi.
Mario
sumber
Seperti yang saya katakan di komentar - sudah butuh 1-2 hari. Jika saya menambahkan batas waktu 5 menit atau memulai yang lain, itu tidak akan membantu tetapi membuatnya lebih buruk. Saya perlu mendapatkan semua permintaan dengan sedikit waktu yang terbuang.
user270181
Pendekatan pertama saya tidak akan menggunakan batas waktu. Ini akan mencoba mengunduh semua file yang sudah usang sekaligus. 5 menit kemudian Anda mencoba lagi, hanya mengunduh file yang gagal pada upaya pertama. Hanya ada beberapa menunggu antara upaya mengunduh semuanya.
Mario
seperti yang saya katakan semua skrip bekerja 1-2 hari. Itu tergantung pada seberapa banyak info yang mereka berikan kepada saya. Terkadang 15k, kadang 45k. Dan saya punya 2 skrip lagi. Semua bekerja dalam urutan kronologis. Jadi saya tidak bisa membuang waktu untuk memeriksa semua file dan coba lagi. Saya harus melakukannya dalam proses.
user270181
Bagaimana kalau memparalelasinya? Anda juga bisa menyimpan beberapa penunjuk atau indeks ke file terbaru yang dapat Anda ambil upaya terakhir. Dapatkan sedikit kreatif di sini. Dengan cara ini Anda tidak perlu memeriksa ulang semua file setiap saat; setel ulang indeks setelah semuanya selesai atau lebih.
Mario
Saat ini saya sedang berpikir untuk memeriksa file (di mana saya menulis info). Karena setiap permintaan membuat file baru. Jika ukuran file adalah 0 (403) maka tidur 5 detik dan coba lagi. Apa pendapatmu tentang itu?
user270181