gireceğim bir web adresinin var olup olmadığını otamatik kontrol etmek istiyorum.
ama bu kadar basit bir istek bile nedense bulunmaz oluyor.
c ile bu nasıl yapabilirim.
Ping atınca olmuyormu?
pingi sadece kök adresine yani ip numarasına atıyo
ben full adresin var olup olmadığını kontrol etmek istiyorum
Her sayfada işlemeyebilir ama aklıma şöyle bir yöntem geldi.
Girdiğiniz sayfada birşey yoksa çoğu zaman "böyle bir sayfa yok" tarzı bir yazı gelir.
c++ ta açmak istediğiniz sayfanın html içeriğini sorgulayarak "böyle bir sayfa yok" içeriği var mı yok mu diye kontrol edip anlayabilirsiniz.
Ama bazı siteler yalnış bir sayfaya girmek istediğinizde anasayfaya yönlendirebiliyor ya da kendileri bunu anlayarak "böyle bir döküman yok" tarzında mesajlar verebiliyorlar.
aklınıza geleni değilde bildiğinizi hatta yaptığınız şeyi söylerseniz daha yardımcı olursunuz.
http://www.tek-tips.com/viewthread.cfm?qid=1654771 (http://www.tek-tips.com/viewthread.cfm?qid=1654771)
bende bu gibi şeyler deniyorum ama bi sonuca ulaşamadım.
basic yerine c olsaydı daha iyi olurdu.
Sunucuya socketle 80 nolu porta bağlanıp, sayfa talebinde bulunmanız yeterli.
GET /index.html HTTP/1.0\r\n
Host: www . xxxxxxx . c o m r\n
\r\n
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#define PORT 80
/* REPLACE with your server machine name*/
#define HOST "localhost"
#define DIRSIZE 8192
main(argc, argv)
int argc; char **argv;
{
char hostname[100];
char dir[DIRSIZE];
int sd;
struct sockaddr_in sin;
struct sockaddr_in pin;
struct hostent *hp;
char gonder[100] = "GET /index.html HTTP/1.0\r\nHost: www. xxx . comr\n\r\n";
strcpy(hostname,HOST);
if (argc>1)
{ strcpy(hostname,argv[1]); }
/* go find out about the desired host machine */
if ((hp = gethostbyname(hostname)) == 0) {
perror("gethostbyname");
exit(1);
}
/* fill in the socket structure with host information */
memset(&pin, 0, sizeof(pin));
pin.sin_family = AF_INET;
pin.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;
pin.sin_port = htons(PORT);
/* grab an Internet domain socket */
if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
/* connect to PORT on HOST */
if (connect(sd,(struct sockaddr *) &pin, sizeof(pin)) == -1) {
perror("connect");
exit(1);
}
/* send a message to the server PORT on machine HOST */
if (send(sd, gonder, strlen(gonder), 0) == -1) {
perror("send");
exit(1);
}
/* wait for a message to come back from the server */
if (recv(sd, dir, DIRSIZE, 0) == -1) {
perror("recv");
exit(1);
}
/* spew-out the results and bail out of here! */
printf("%s\n", dir);
close(sd);
}
gcc test.c -o test
./test google.com
HTTP/1.0 302 Found
Location: http://www.google.com/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
X-Content-Type-Options: nosniff
Date: Tue, 02 Apr 2013 12:55:55 GMT
Server: sffe
Content-Length: 219
X-XSS-Protection: 1; mode=block
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
benzeri bir çıktı oluşturur. istersen sunucudan gelen veri boyutunu istersen içerikteki bir kelimeyi sorgularak sitenin varlıgından emin olabilirsin.
Alıntı yapılan: speak48 - 02 Nisan 2013, 14:42:26
aklınıza geleni değilde bildiğinizi hatta yaptığınız şeyi söylerseniz daha yardımcı olursunuz.
Bilmediğim şey aklıma nasıl gelsin? Bastır parasını yapıyım o kadar hazır istiyorsan.
Ayrıca konuyu visual c++ kısmına açmışsın. C ile nasıl yapılır diye soruyosun.
Alıntı yapılan: speak48 - 02 Nisan 2013, 13:55:50
gireceğim bir web adresinin var olup olmadığını otamatik kontrol etmek istiyorum.
ama bu kadar basit bir istek bile nedense bulunmaz oluyor.
c ile bu nasıl yapabilirim.
embedded webbrowser var onu kullanırsınız. Bu şu demek. internet explorer sizin uygulamanız içinde açılıyor sayfa içeriğini ve diğer birçok özelliğini kullanabiliyorsunuz. düğmeleri tıklayıp javascriptlerini çalıştıraibliyorsunuz.
diyelim sayfayı açtık
http://sfasfasdasd.com (http://sfasfasdasd.com)
3 saniye bekledik tık yok. bir de baktık sayfa içindeki metin
Sunucu bulunamadı
Alıntı Yapwww.sfasfasdasd.com (http://www.sfasfasdasd.com) konumundaki sunucu bulunamıyor.
haline dönüşmüş. Haaa nedemekmiş sayfa yokmuş.
3 saniye bekledik hala bekliyoruz hiç bir şey gelmemiş. 30 saniye oldu hala içi boş. bu nedemek? sunucuda sitede bir sıkıntı var demek hala cevap veremiyor.
3 saniye bekledik sayfa içinde başka birşey çıktı 404 hatası yada 503 bu ne demek?..
bunun gibi size lazım olan hataları göstertebilir kaydını tutabilirsiniz. lazım olmayanın saklamazsınız.
peki sayfa açıldıysa nasıl anlayacağzı daha önce o sayfa ziyaret edilmemiş ki? şuşu içerik veya hatalar yoksa sayfa açılmış demektir. orda dur. sayfa içinde beğendiğin link veya içerik varsa onun varlığına da bakılabilir.
embedded webbrowser C de çalışır mı? illa ki çalışır komponenti yoksa bile activex nesnesini kullanabilirsiniz.
@everygelem
socket işe yarayabilir gözüküyor ama bu socket kütüphanesi nerdedir onu arıyoruz şimdide.
@meftun
aklınıza gelen şeyde bir bilgi yok.
deniyeceğim sayfalar olmayınca başka bir yere yonlendirmiyo direkt browser notfound mesajı gönderiyor.
yani olay html in içeriğini sorgulama değil bu html erişilebilinirmi odur.
aradığım şeyde zaten nasıl html erişeceğin ve alacağın hata kodları
bu forumda c bölümü yok ayrıca windowsun c++ derleyicisiye c derleyicisi ortak.
@t2
3 saniyemi baya yüksek 120000 adresi kontrol etmem gerkiyor elle yapmaktan uzun sürmesin
ayrıca aradığım mulaka 3 5 tane fonksiyonun birlikte kullanımıdır koskoca browseri kuullanmayalım
Alıntı yapılan: speak48 - 02 Nisan 2013, 18:34:30
deniyeceğim sayfalar olmayınca başka bir yere yonlendirmiyo direkt browser notfound mesajı gönderiyor.
bunu gönderiyorsa olay basit değil mi?
o basit şeyi arıyoruz hala.
bir ilginçlik var belki sorun çıkarır.
o adresin ismi yerine ip adresini girersek browser gene not found diyor.
browser'ın verdiği mesajı @t2 nin dediği gibi programınıza browser ekleyerek rahat halledersiniz. Siz sayfa yoksa html kodu yok diye düşünmüşsünüz. Oysa browser kendisi o mesajı html şeklinde verir. Sizde bu mesajı görünce "hımm demekki böyle bir site yoktur" mesajını şak diye yapıştırırsınız.
Ama bunu visual dillerde yaparsınız c dilinde browser ekleyip mesaj alma olayını bilmiyorum.
Alıntı Yap120000 adresi kontrol etmem gerkiyor
Rakam doğru mu?
Webbrowser kontrolleri ile olur tabii ama redirect edileni anlamak kısmı patlar.
En iyi yol @everygelem in verdiği örnekteki gibi direkt soket kullanmak. Sayfa bulundu, yok yada redirect edildi ana sayfaya yönlendi gibi şeyleri anlayabilirsiniz. Birde webbrowser a göre çok daha hızlı olur.
Sayfanın içeriği ile ilgilenmiyorsanız sadece baştaki 50-100 byte header'ı okumak yeterli. Sonrasını almak bile gerekmez.
Ha birde sadece http header'ını da request etmek de mümkün.
Socket için kütüphane vs. bulmak zor değil.
Yine de hazır birşey kullanayım derseniz chilkat a bir bakın derim. Çeşitli diller için örnekleri vs de var. 1 Ay deneme süresinde işinizi bitirmeniz lazım.
http://www.example-code.com/vcpp/http.asp (http://www.example-code.com/vcpp/http.asp)
http header get için direkt örnek kodu da varmış .
http://www.example-code.com/vcpp/http_head.asp (http://www.example-code.com/vcpp/http_head.asp)
Geri kalan dönen header içinde "200 OK" varmı yok kısmı.
hocam soketlerle işi çözdüm.
windowsun "winsock2.h" kütüphanesi bsd socket ile aynı işi görüyormuş.
hata kodlarına bakıp client error değilse içeriğine göz atıp
anca bitane doğru adres bulabildim.
ama beklediğimden yavaş çalışmakta.
Her sunucuya tek tek bağlanmak biraz yavaş olur evet. bunun içinde paralellik (thread) olayına bakın c de.