[php] fopen naar https://etc lukt niet

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

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik wil met fopen in php een bestand openen wat zich op een andere server bevindt, en ook nog een https-server. Het enige wat ik krijg is dat php het bestand niet kan vinden in C:\inetpub\www(...)etc: failed to open stream: No such file or directory

In php.ini heb ik wel dit staan:
code:
1
allow_url_fopen = On


Het zou dus moeten werken... maar dat doet ut niet... |:(

[ Voor 9% gewijzigd door Verwijderd op 14-09-2003 17:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

misschien zou je je post eens kunnen verrijken met wat code, kunnen wij ook zien wat je aan het doen bent?

Acties:
  • 0 Henk 'm!

Verwijderd

je doet toch wel

fopen("https://foo.bar')

he? :) die protocolspecificatie is essentieel omdattie anders het niet als URL ziet :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
tuurlijk doe ik https://blabla :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$tdlink = "https://www.tripledeal.com/servlets/etc/etc/etc/bla/bla?".
    "command=new_payment_cluster&".
    "merchant_name=$td_user&".
    "merchant_transaction_id=$total&".
    "profile=OnlyCreditCards&".
    "client_id=$valid_user&".
    "price=$totaal&".
    "cur_price=EUR&".
    "client_email=$email&".
    "client_firstname=$firstname&".
    "client_lastname=$lastname&".
    "client_address=$street&".
    "client_zip=$postcode&".
    "client_city=$town&".
    "client_country=$country&".
    "client_language=nl&".
    "description=blabla";



$data = "";
$fd = fopen ($tdlink, "r");
while (!feof ($fd)) {
    $buffer = fgets($fd, 4096);
    $data = $data . $buffer;

}
fclose ($fd);

$xml=xmlize($data);

[ Voor 19% gewijzigd door Verwijderd op 14-09-2003 17:32 ]


Acties:
  • 0 Henk 'm!

Verwijderd

oh en https in fopen wordt sinds php 4.3.0 ondersteund, niet eerder.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Your host is running PHP version 4.3.3
daar ligt het dus ook niet aan...

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Dat er support voor is sinds php 4.3.x zegt nog niet dat het ook in jouw specifieke php gebakken zit, ik gok dat je aan de output van phpinfo() wel moet kunnen zien of dat het geval is.

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

In het eerste blokje van je phpinfo() staat (sinds PHP 4.3.0) welke soorten streams geregistreerd zijn. Standaard zijn dit volgens mij alleen "http://", "ftp://" (wellicht ook nog dingen als "php://", voor stdin en stdout). Support voor "https://" en "ftps://" moet je meecompileren op de host. In het geval van een Windows-host moet je een alternatieve php4ts.dll hebben, ik had er een maar die is outdated, en ik weet bovendien niet meer waar ie staat.

Rustacean


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Probeer ssl:// eens.
Underlying socket stream context options: Additional context options may be supported by the underlying transport For http:// streams, refer to context options for the tcp:// transport. For https:// streams, refer to context options for the ssl:// transport.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
volgens phpinfo() zijn php, http, ftp, https, ftps, compress.zlib allemaal supported. Die speciale php4ts.dll heb ik inderdaad al. Kun je hier vandaan halen:
http://ftp.proventum.net/pub/php/win32/misc/openssl/

Er verandert (na reboot) wel iets, ik krijg nu: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request Erg vreemd, geen id waar dit nu weer aan ligt...??

De optie met ssl:// ipv https:// werkt niet, dan krijg ik weer failed to open stream: No such file or directory

Acties:
  • 0 Henk 'm!

Verwijderd

Het zou mij niet verbazen als die PHP functie verwacht dat de de SSL verbinding gecertificeerd is als een trusted domein.
Er zijn veel van die mindere websites die niet de moeite nemen om hun keys te laten controleren door instanties zoals verisign en dan krijg je met je webbrowser een dialog te zien of je hun key wil aanvaarden. Lijkt mij logisch om te veronderstellen dat PHP net als je webbrowser niet zomaar elke key zal aanvaarden.
Misschien kan je wel ergens een instellingen maken welke niet-door-een-geschikte-instantie-gecertificeerde keys hij mag aanvaarden of niet. Daarvoor zal je toch in de handleiding van PHP moeten duiken. Het zou alleszinds dom zijn van PHP om zomaar alles te aanvaarden dus jouw probleem is eigenlijk wat de functie behoort te doen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zou kunnen, maar de verbinding die gelegd moet worden is niet bepaald een 'mindere site'... zoals je hierboven kunt zien (sourcecode) gaat het om Tripledeal en die hebben hun certificaatjes prima in orde. (gecheckt: als ik de betreffende url aanroep in m'n browser werkt het, geen dialogs etc)

Acties:
  • 0 Henk 'm!

Verwijderd

allow_url_fopen = On
Lijkt mij toch wel vrij gevaarlijk :) Dit wilt toch zeggen dat eender welk scriptkiddie je phpcode kan grabben?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
offtopic...
code:
1
allow_url_fopen = On

Whether to allow the treatment of URLs (like http:// or ftp://) as files. Gaat dus om outbound verkeer van mijn server, heeft niet te maken met andere servers die naar mij fopen() willen doen, kortom je hebt het over wat anders als mijn probleem... :/

[ Voor 32% gewijzigd door Verwijderd op 14-09-2003 20:54 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou dit eens nalezen
http://be2.php.net/manual/en/transports.php#transports.inet

Er zijn enkele instellingen die gemaakt moeten zijn zoals de plaats waar het certificatiebestand zich bevind op het systeem. Dan kan dat van de server daarmee gecontroleerd worden.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
volgens die pagina staat verify_peer standaard op FALSE, en wordt de geldigheid van een certificaat dus niet gecontroleerd, m.a.w. iedere SSL-verbinding wordt dus toegestaan. Volgens mij ligt het hier dus niet aan...

Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
volgens mij werkt dit niet met een url:
PHP:
1
2
3
4
5
while (!feof ($fd)) {
    $buffer = fgets($fd, 4096);
    $data = $data . $buffer;
}
fclose ($fd);

probeer het eens met file_get_contents

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
get_contents maakt geen verschil: met een http-url werkt fopen wel (is al getest)
deze verbinding vereist echter https (SSL) ivm creditcards etc...

[ Voor 21% gewijzigd door Verwijderd op 14-09-2003 22:03 ]


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Verwijderd schreef op 14 September 2003 @ 17:31:
tuurlijk doe ik https://blabla :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$tdlink = "https://www.tripledeal.com/servlets/etc/etc/etc/bla/bla?".
    "command=new_payment_cluster&".
    "merchant_name=$td_user&".
    "merchant_transaction_id=$total&".
    "profile=OnlyCreditCards&".
    "client_id=$valid_user&".
    "price=$totaal&".
    "cur_price=EUR&".
    "client_email=$email&".
    "client_firstname=$firstname&".
    "client_lastname=$lastname&".
    "client_address=$street&".
    "client_zip=$postcode&".
    "client_city=$town&".
    "client_country=$country&".
    "client_language=nl&".
    "description=blabla";



$data = "";
$fd = fopen ($tdlink, "r");
while (!feof ($fd)) {
    $buffer = fgets($fd, 4096);
    $data = $data . $buffer;

}
fclose ($fd);

$xml=xmlize($data);
Nog wat anders, volgens mij is je querystring langer dan 255 tekens, is dat geen limiet?

Probeer eens een andere https pagina, bijvoorbeeld:
https://www.redhat.com/ar...9-September/msg00971.html

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • slm
  • Registratie: Januari 2003
  • Laatst online: 12-11-2023

slm

Kan je niet beter met CURL werken ipv gewoon fopen?

To study and not think is a waste. To think and not study is dangerous.


Acties:
  • 0 Henk 'm!

Verwijderd

Je moet openssl in PHP bakken dan werkt het. Liep zelf enkele weken terug ook tegen dit probleem aan toen een script over https moest gaan lopen ipv http. Snapte eerst ook niet waarom het niet meer werkte maar na het compilen met openssl enabled waren de problemen voorbij.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 14 september 2003 @ 23:19:
Je moet openssl in PHP bakken dan werkt het. Liep zelf enkele weken terug ook tegen dit probleem aan toen een script over https moest gaan lopen ipv http. Snapte eerst ook niet waarom het niet meer werkte maar na het compilen met openssl enabled waren de problemen voorbij.
draadje gelezen? :X
for some reason werkt dat dus niet :'(

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
slm schreef op 14 September 2003 @ 22:26:
Kan je niet beter met CURL werken ipv gewoon fopen?
geprobeerd:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
//
// The PHP curl module supports the received page to be returned in a variable
// if told.
//
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"https://www.myurl.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);
?>


volgens PHPinfo:
CURL support enabled
CURL Information libcurl/7.10.5 OpenSSL/0.9.7b zlib/1.1.4

Het zou dus allemaal moeten werken (net als met fopen) maar dat doet ut nog steeds niet: $result blijft empty... (het werkt wel wanneer ik in plaats van https iets anders probeer (om te testen) met http, maar nogmaals: het moet https zijn... |:(

Acties:
  • 0 Henk 'm!

Verwijderd

Is het niet je firewall die het tegenhoud ? TCP/UDP-443

Acties:
  • 0 Henk 'm!

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Verder escape je al je variabelen ook met urlencode?

On track


Acties:
  • 0 Henk 'm!

  • slm
  • Registratie: Januari 2003
  • Laatst online: 12-11-2023

slm

Heb je het ook met andere https urls geprobeerd, zoals bv https://login.passport.net/UICookiesDisabled.srf

(deze gaat bij mij prima)

Krijg je een foutmelding bij gebruik curl? Zo ja, welke? Hierboven zeg je dat je er iets was gewijzigd na reboot. Wat was het er voor en wat er na?

To study and not think is a waste. To think and not study is dangerous.


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Verwijderd schreef op 15 September 2003 @ 08:39:
[...]

draadje gelezen? :X
for some reason werkt dat dus niet :'(
Dan zal het ook nooit gaan werken, aangezien https verbindingen toch echt de openssl nodig heeft.

(ben toevallig ook bezig geweest met een tripledeal connectie namelijk)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Heb nog even lopen testen en ik ben er vrijwel zeker van dat TS z'n variabelen niet escaped:
Warning: fopen(https://sourceforge.net/account/login.php*^%?*1432%8&^":): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request

[ Voor 4% gewijzigd door WouZz op 15-09-2003 11:49 ]

On track


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

WouZz schreef op 15 September 2003 @ 11:47:
Heb nog even lopen testen en ik ben er vrijwel zeker van dat TS z'n variabelen niet escaped:
[...]
Men moet ook niet escapen maar URLEncoden :)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

Ik ben nu ook aan het kloten met TD betalingssysteem. Ik krijg het niet voor elkaar.

Ik wil dus van een URL de output krijgen via cURL of fopen(). fopen() zou met Secure moeten werken aangezien ik dat heb meegecompiled in m'n PHP installatie.

Als ik de url in m'n browser typ krijg ik wel een return.

Wouter.

[ Voor 24% gewijzigd door Verwijderd op 25-01-2004 12:13 ]


Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 18-09 19:03
Verwijderd schreef op 25 januari 2004 @ 11:00:
Ik ben nu ook aan het kloten met TD betalingssysteem. Ik krijg het niet voor elkaar.

Ik wil dus van een URL de output krijgen via cURL of fopen(). fopen() zou met Secure moeten werken aangezien ik dat heb meegecompiled in m'n PHP installatie.

Als ik de url in m'n browser typ krijg ik wel een return.
Wat extra informatie zou hier ook weer op z'n plaats zijn. Wel OS, welke PHP versie, wat is allemaal meegecompileerd? Op zich is TripleDeal een fluitje van een cent om te implementeren, dus waarschijnlijk zit er ergens in je configuratie een foutje.

Acties:
  • 0 Henk 'm!

Verwijderd

Idd, inmiddels werkt het.
Foutje bij mij was dat ik de postfields in de url mee gaf. Die heb ik nu in aparte postfield optie staan binnen curl. Werkt dus :)

Wouter.
Pagina: 1