m-ahmadi / tse-client

A client for fetching stock data from the Tehran Stock Exchange (TSETMC). Works in Browser, Node and as CLI.
MIT License
33 stars 12 forks source link

403 forbidden #5

Closed Baft closed 2 years ago

Baft commented 2 years ago

وقتتون بخیر . وقتی آدرس زیر فراخوانده میشه ، خطای 403 دریافت میشه. آیا سرویسی که فراخوانده میشه پولی هست؟ یا اینکه اشتباهی در فراخوانی صورت میگیره؟ API_URL?t=InstrumentAndShare&a=20220629&a2=0

m-ahmadi commented 2 years ago

سلام، من همین لحظه تست کردم مشکلی ندارم، این فراخوانی که انجام می دهید در مرورگر هست یا محیط node.js ؟ توجه داشته باشید چند روزی هست سایت بورس با vpn باز نمی شود، خیر این وب سرویس ها پولی نیستند.

Baft commented 2 years ago

از طریق مرورگر انجام میدم . با php پروکسی کردم. هم اکنون این حظا را میدهد.

دسترسی شما بدلیل مسائل امنیتی مسدود شده است.

لطفا با پشتیبانی تماس بگیرید : 02184301338

URL: http://service.tsetmc.com/tsev2/data/TseClient2.aspx?t=InstrumentAndShare&a=20220629&a2=0

با متد file_get_content خطا مفهومی نمیده و من تابغ رو با کد زیر جایپزین کردم که برگشتی سایت رو میشه واضحتر در قسمت کنسول مرورگر دید


function curl_get_contents($url)
{
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

//echo file_get_contents("http://service.tsetmc.com/tsev2/data/TseClient2.aspx?t=$t&a=$a&a2=$a2");
print curl_get_contents("http://service.tsetmc.com/tsev2/data/TseClient2.aspx?t=$t&a=$a&a2=$a2");

البته فقط ادرسی که خدمتتون ذکر کردم این پیغام را میدهد. مثلا ادرس tseProxy.php?t=Instrument&a=0 این خطا را نمیدهد. همچنین وقتی که مستقیما از مرورگر فراخوانده میشود هم 403 نمیده . الان متوجه شدم که از سمت php فراخوانده میشه 403 میده !!!

همچنین تست رو از طریق simple-dashboard.html دارم انجام میدم.

متشکرم

Baft commented 2 years ago

تابع curl رو در کدphp به روش زیر بروزرسانی کردم و مشکل حل شد . در واقع سایت فراخوانی های رو که کمتر شبیه به fingerprint های معمول هست بلاک میکنه.


function curl_get_contents($url)
{

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0');
  curl_setopt($ch, CURLOPT_ENCODING , 'gzip, deflate');
  curl_setopt($ch, CURLOPT_HTTPHEADER , array(
                'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                'Accept-Language: en-US,en;q=0.5',
                'Connection: keep-alive',
                'Upgrade-Insecure-Requests: 1'));

  curl_setopt($ch, CURLOPT_URL,$url);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

متشکرم از برنامه زیبایی که تهیه کردین . واقعا متفاوت از کارهای دیگه ایی بود که در این زمینه وجود داره.

m-ahmadi commented 2 years ago

من الان در همون simple-dashboard.html یک مثال درست کردم، با یک پروکسی سرور در محیط node.js، و به این پیغام بر نخوردم، اگر در این پروکسی جاواسکریپتی هم به همین خطا می خوردم متقاعد می شدم ایراد در وب سرویسه هست، به خاطر همین احتمالم اینه این پر وکسی که توسط curl هست یه جاییش یه اتفاقی داره میوفته

شما این فولدر رو اکسترکت کنین، nodeproxy.zip بعد برین داخلش cd nodeproxy بعد بزنین npm install بعد بزنین node index.js

بعد این لاین رو به اول simple-dashboard.html اضافه کنین، (داخل تگ اسکریپت آخر)

tse.API_URL = 'http://localhost:3000/';

حالا یه رفرش بدین و تب network رو ببینین اون وب سرویس 200 میده

m-ahmadi commented 2 years ago

خب خدا رو شکر، (در حال نوشتن بودم ندیدم پیام های جدید رو)

تشکر از لطف شما.