SOAP over proxy

Pagina: 1
Acties:
  • 325 views sinds 30-01-2008
  • Reageer

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 11-09 16:16
Ik ben op 't moment bezig met het bestuderen van SOAP voor m'n werk. Nu ben ik er pas ongeveer twee weken mee bezig, maar wil wel al wat proberen te maken.

Ik gebruik C++ voor het programmeerwerk. Nu moet er dus een url opgegeven worden voor de method die ik wil gebruiken. In dit geval is dat: http://services.xmethods.net:80/soap voor een simpele getquote method.

Ik heb echter het probleem dat het internet bij ons via een proxyserver loopt en gezien mijn geringe kennis hierover graag de hulp van een van jullie (8>

Hoe moet ik de naam van de proxyserver verwerken in de code zodat de request via de proxyserver gaat?

Alvast bedankt

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 11-09 16:16
Sorry voor het omhoog schoppen, maar ik ben er zelf nog steeds niet uit. Ik zal het nog even wat verduidelijken.

Ik had bij mezelf gedacht om het internetadres dan als volgt weer te geven als URL:
wwwproxy.bedrijf.nl:8080/http:/services.xmethods.net:80/soap

Dit werkte echter niet. Best logisch, want als zoiets mogelijk zou zijn, zou ik de syntax ervan niet weten.

Mijn begeleider (het is voor een stage) suggereerde iets met "setenv HTTP_PROXY", had ik nog nooit van gehoord :?, maar dat werkte dus ook niet (ook niet in een andere vorm).

Misschien dat nu iemand (8> de oplossing heeft???

Hope so...

  • JungleJim
  • Registratie: December 2000
  • Laatst online: 21:57
Kun je zoiets niet instellen bij de SOAP implementatie die je gebruikt? Zoek anders ff in de documentatie die je hebt.

Ik dacht trouwens dat SOAP geen last had van firewalls enzo :)

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 11-09 16:16
Op dinsdag 26 februari 2002 21:38 schreef JungleJim het volgende:
Kun je zoiets niet instellen bij de SOAP implementatie die je gebruikt? Zoek anders ff in de documentatie die je hebt.

Ik dacht trouwens dat SOAP geen last had van firewalls enzo :)
Nee dat kan ik niet instellen, omdat de implementatie die ik gebruik (gSOAP) werkt als een preprocessor en dus enkel programmacode genereert.

SOAP heeft idd (zo goed als) geen last van firewalls, omdat het gewoon over poort 80 gaat, maar ik heb het hier over een proxyserver en dat is een klein ;) verschilletje.

Verwijderd

Op dinsdag 26 februari 2002 23:14 schreef woutertjez het volgende:
SOAP heeft idd (zo goed als) geen last van firewalls, omdat het gewoon over poort 80 gaat, maar ik heb het hier over een proxyserver en dat is een klein ;) verschilletje.
Ik kan me herrineren dat de soap-toolkit standaard naar de windows(IE) instellingen keek voor z'n proxy maar helemaal zeker weet ik da nie meer.

Verwijderd

Als MS-SOAP ook gebruik maakt van het ServerXMLHTTP component, kun je met dit tooltje de proxy instellen.

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 11-09 16:16
Ik gebruik dus geen SOAP toolkit voor onder Windows, maar onder LINUX. Hier werkt het dus niet allemaal zo vanzelfsprekend ;(

Maar misschien dat het toch wel een hele simpele oplossing heeft??? :?

Verwijderd

code:
1
2
3
4
5
6
my $s = SOAP::Lite
   ->uri('World')
   ->proxy('http://soapserver.mycompany.com/soap/
soapserver.cgi')
   ->GoodByeWorld("cruel");
print $s->result();

Dit vond ik op ZDNet. Maar als je niet wilt vertellen welke LIB je gebruikt, kan niemand je natuurlijk helpen...

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 11-09 16:16
Op woensdag 27 februari 2002 09:06 schreef Doekman het volgende:
code:
1
2
3
4
5
6
my $s = SOAP::Lite
   ->uri('World')
   ->proxy('http://soapserver.mycompany.com/soap/
soapserver.cgi')
   ->GoodByeWorld("cruel");
print $s->result();

Dit vond ik op ZDNet. Maar als je niet wilt vertellen welke LIB je gebruikt, kan niemand je natuurlijk helpen...
Bedankt voor je moeite maar dit is perl zo te zien.
Ik gebruik gSOAP, wat een toolkit is voor C++

Had ik misschien idd wel wat eerder kunnen vermelden |:(

  • igmar
  • Registratie: April 2000
  • Laatst online: 09-09 19:53

igmar

ISO20022

Ik ben op 't moment bezig met het bestuderen van SOAP voor m'n werk. Nu ben ik er pas ongeveer twee weken mee bezig, maar wil wel al wat proberen te maken.

Ik gebruik C++ voor het programmeerwerk. Nu moet er dus een url opgegeven worden voor de method die ik wil gebruiken. In dit geval is dat: http://services.xmethods.net:80/soap voor een simpele getquote method.

Ik heb echter het probleem dat het internet bij ons via een proxyserver loopt en gezien mijn geringe kennis hierover graag de hulp van een van jullie (8>
De request naar een proxy zijn bijna hetzelfde als van een normaal HTTP request :

GET http://www.url.nl/path/naar/uri HTTP/1.1

Zowel de hostname als de http:// zijn verplicht in dit geval. Bij de meeste proxies mag je meer requests per connectie gebruiken (HTTP/1.1 standaard).

Indien de proxy authorisatie nodig hebt moet je je eerst aanmelden, de details daarvan ben ik beetje vergeten :)

Indien je meer details wikt geef maar een gil :)

  • JungleJim
  • Registratie: December 2000
  • Laatst online: 21:57
Op dinsdag 26 februari 2002 23:14 schreef woutertjez het volgende:

[..]

Nee dat kan ik niet instellen, omdat de implementatie die ik gebruik (gSOAP) werkt als een preprocessor en dus enkel programmacode genereert.
Heb je ook geprobeerd om naast de HTTP_PROXY ook de http_proxy environment variabele te zetten? Somme programmas gebruiken de ene, andere weer de andere variabele.

Voor de zekerheid: onder bash zet je ze zo:
http_proxy=http://yourproxy.yourdomain:8080/
HTTP_PROXY="$http_proxy"
export http_proxy HTTP_PROXY

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 11-09 16:16
Op woensdag 27 februari 2002 09:43 schreef JungleJim het volgende:

[..]

Heb je ook geprobeerd om naast de HTTP_PROXY ook de http_proxy environment variabele te zetten? Somme programmas gebruiken de ene, andere weer de andere variabele.

Voor de zekerheid: onder bash zet je ze zo:
http_proxy=http://yourproxy.yourdomain:8080/
HTTP_PROXY="$http_proxy"
export http_proxy HTTP_PROXY
Nope, dit werkt jammergenoeg ook niet. Ik krijg nog steeds dezelfde foutmelding:

SOAP FAULT: Client
"connection timed out"
Detail: TCP connect failed in tcp_connect()

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 11-09 16:16
En dit is dus de functie tcp_connect()
Deze is automatisch gegenereerd door gSOAP....

static int
tcp_connect(struct soap *soap, const char *hostname, int port)
{ struct sockaddr_in sockaddr;
struct hostent *host;
int len = SOAP_BUFLEN;
int set = 1;
if (tcp_init(soap))
{ *soap_faultcode(soap) = "Client";
*soap_faultstring(soap) = tcp_error(soap);
*soap_faultdetail(soap) = "TCP initialization failed in tcp_connect()";
soap->error = SOAP_TCP_ERROR;
return -1;
}
soap->errmode = 0;
if ((soap->socket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{ soap->errnum = errno;
*soap_faultcode(soap) = "Client";
*soap_faultstring(soap) = tcp_error(soap);
*soap_faultdetail(soap) = "TCP socket failed in tcp_connect()";
soap->error = SOAP_TCP_ERROR;
return -1;
}
if (setsockopt(soap->socket, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int))
|| setsockopt(soap->socket, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int))
/* || setsockopt(soap_socket, SOL_SOCKET, SO_KEEPALIVE, &set, sizeof(int)) */
#ifdef TCP_NODELAY
|| setsockopt(soap->socket, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int))
#endif
)
{ soap->errnum = errno;
*soap_faultcode(soap) = "Client";
*soap_faultstring(soap) = tcp_error(soap);
*soap_faultdetail(soap) = "TCP setsockopt failed in tcp_connect()";
soap->error = SOAP_TCP_ERROR;
return -1;
}
memset(&sockaddr, 0, sizeof(sockaddr));
sockaddr.sin_family = AF_INET;
DBGLOG(TEST,fprintf(fdebug,"\nOpen socket: %d to Hostname-#%s#\n", soap->socket, hostname));
soap->errmode = 2;
if (!(host = gethostbyname(hostname)))
{ soap->errnum = h_errno;
DBGLOG(TEST, fprintf(fdebug,"\nERROR :: HOST NAME NOT FOUND \n"));
*soap_faultcode(soap) = "Client";
*soap_faultstring(soap) = tcp_error(soap);
*soap_faultdetail(soap) = "TCP get host by name failed in tcp_connect()";
soap->error = SOAP_TCP_ERROR;
return -1;
}
memcpy(&sockaddr.sin_addr, host->h_addr, host->h_length);
sockaddr.sin_port = htons((short)port);
soap->errmode = 0;
if (connect(soap->socket, (struct sockaddr*)&sockaddr, sizeof(sockaddr)))
{ soap->errnum = errno;
DBGLOG(TEST, "\nERROR :: COULD NOT CONNECT TO HOST \n");
soap_closesock(soap);
*soap_faultcode(soap) = "Client";
*soap_faultstring(soap) = tcp_error(soap);
*soap_faultdetail(soap) = "TCP connect failed in tcp_connect()";
soap->error = SOAP_TCP_ERROR;
}
return soap->socket;
}

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 11-09 16:16
Op woensdag 27 februari 2002 09:18 schreef igmar het volgende:
De request naar een proxy zijn bijna hetzelfde als van een normaal HTTP request :

GET http://www.url.nl/path/naar/uri HTTP/1.1

Zowel de hostname als de http:// zijn verplicht in dit geval. Bij de meeste proxies mag je meer requests per connectie gebruiken (HTTP/1.1 standaard).

Indien de proxy authorisatie nodig hebt moet je je eerst aanmelden, de details daarvan ben ik beetje vergeten :)

Indien je meer details wikt geef maar een gil :)
Ik wil de request niet naar een proxy sturen (ik neem aan dat je dit bedoelt), maar door een proxy van ons bedrijf heen naar een andere site.

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 11-09 16:16
Ik heb ook de makers van de toolkit een mail gestuurd en ik heb inmiddels een antwoord van ze terug gekregen.

gSOAP is op het moment gewoon nog niet in staat om om te gaan met proxy's. Er wordt momenteel gewerkt aan een oplossing.

Dus bedankt voor de uitleg, maar er is klaarblijkelijk gewoon nog geen oplossing voor.
Pagina: 1